我在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;
}发布于 2013-04-27 00:16:19
我会说这是因为枚举名称中的_ (下划线),它无法找到匹配。我假设这是因为枚举名称不能以数字开头。也许,如果您按如下方式修改代码,它将会正常工作:
if(Character.isDigit(ext.charAt(0)))
{
ext = "_" + ext;
}
if (SupportedFileFormat.valueOf(ext.toUpperCase(Locale.US)) != null) {
Log.i("extension", ext);
return true;
}基本上,代码将查看扩展名是否以数字开头,如果是,则在开头添加下划线,以确保它与枚举命名约定匹配
当然,如果只有一个字符串数组来保存所支持的文件格式,而不是一个枚举,就会简单得多
https://stackoverflow.com/questions/16240787
复制相似问题