我在特定扩展程序的SD卡上的文件夹中检查我的文件。一切顺利,除了.3gp文件似乎不被此代码识别,尽管它以可能的格式列出。知道可能导致这种情况的原因吗?
public enum SupportedFileFormat {
_3GP("3gp"), MP4("mp4"), M4A("m4a"), AAC("aac"), TS("ts"), FLAC("flac"), MP3(
"mp3"), MID("mid"), XMF("xmf"), MXMF("mxmf"), RTTTL("rtttl"), RTX(
"rtx"), OTA("ota"), IMY("imy"), OGG("ogg"), MKV("mkv"), WAV(
"wav");
private String filesuffix;
SupportedFileFormat(String filesuffix) {
this.filesuffix = filesuffix;
}
public String getFilesuffix() {
return filesuffix;
}
}
@SuppressLint("DefaultLocale")
private boolean checkExtension(String fileName) {
String ext = getFileExtension(fileName);
if (ext == null)
return false;
try {
if (SupportedFileFormat.valueOf(ext.toUpperCase(Locale.US)) != null) {
Log.i("extension", ext);
return true;
}
} catch (IllegalArgumentException e) {
return false;
}
return false;
}
public String getFileExtension(String fileName) {
int i = fileName.lastIndexOf('.');
if (i > 0) {
return fileName.substring(i + 1);
} else
return null;
}
答案 0 :(得分:1)
我想说这是因为枚举名称中的_
(下划线),它无法找到匹配项。我假设这是因为枚举名称不能以数字开头。也许如果您按如下方式修改代码,它将起作用:
if(Character.isDigit(ext.charAt(0)))
{
ext = "_" + ext;
}
if (SupportedFileFormat.valueOf(ext.toUpperCase(Locale.US)) != null) {
Log.i("extension", ext);
return true;
}
基本上,代码正在查看扩展是否以数字开头,如果是,我们在开头添加下划线以确保它与我们的枚举命名约定匹配
当然,如果你只有一个字符串数组来保存你支持的文件格式,而不是枚举
,这将会简单得多。