package com.netease.nim.uikit.common.util.file;
import java.util.Locale;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.MimeTypeMap;
import com.netease.nim.uikit.R;
import com.netease.nim.uikit.NimUIKit;
import com.netease.nim.uikit.common.util.string.StringUtil;
public class FileUtil {
private static final String TAG = "FileUtil";
public static boolean hasExtentsion(String filename) {
int dot = filename.lastIndexOf('.');
if ((dot > -1) && (dot < (filename.length() - 1))) {
return true;
} else {
return false;
}
}
// 获取文件扩展名
public static String getExtensionName(String filename) {
if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.');
if ((dot > -1) && (dot < (filename.length() - 1))) {
return filename.substring(dot + 1);
}
}
return "";
}
// 获取文件名
public static String getFileNameFromPath(String filepath) {
if ((filepath != null) && (filepath.length() > 0)) {
int sep = filepath.lastIndexOf('/');
if ((sep > -1) && (sep < filepath.length() - 1)) {
return filepath.substring(sep + 1);
}
}
return filepath;
}
// 获取不带扩展名的文件名
public static String getFileNameNoEx(String filename) {
if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.');
if ((dot > -1) && (dot < (filename.length()))) {
return filename.substring(0, dot);
}
}
return filename;
}
public static String getMimeType(String filePath) {
if (TextUtils.isEmpty(filePath)) {
return "";
}
String type = null;
String extension = getExtensionName(filePath.toLowerCase());
if (!TextUtils.isEmpty(extension)) {
MimeTypeMap mime = MimeTypeMap.getSingleton();
type = mime.getMimeTypeFromExtension(extension);
}
Log.i(TAG, "url:" + filePath + " " + "type:" + type);
// FIXME
if (StringUtil.isEmpty(type) && filePath.endsWith("aac")) {
type = "audio/aac";
}
return type;
}
public enum SizeUnit {
Byte,
KB,
MB,
GB,
TB,
Auto,
}
public static String formatFileSize(long size) {
return formatFileSize(size, SizeUnit.Auto);
}
public static String formatFileSize(long size, SizeUnit unit) {
if (size < 0) {
return NimUIKit.getContext().getString(R.string.unknow_size);
}
final double KB = 1024;
final double MB = KB * 1024;
final double GB = MB * 1024;
final double TB = GB * 1024;
if (unit == SizeUnit.Auto) {
if (size < KB) {
unit = SizeUnit.Byte;
} else if (size < MB) {
unit = SizeUnit.KB;
} else if (size < GB) {
unit = SizeUnit.MB;
} else if (size < TB) {
unit = SizeUnit.GB;
} else {
unit = SizeUnit.TB;
}
}
switch (unit) {
case Byte:
return size + "B";
case KB:
return String.format(Locale.US, "%.2fKB", size / KB);
case MB:
return String.format(Locale.US, "%.2fMB", size / MB);
case GB:
return String.format(Locale.US, "%.2fGB", size / GB);
case TB:
return String.format(Locale.US, "%.2fPB", size / TB);
default:
return size + "B";
}
}
}