0

我在某些扩展名的 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;
}
4

1 回答 1

1

我会说这是因为_枚举名称中的(下划线),它无法找到匹配项。我假设这是因为枚举名称不能以数字开头。也许如果您按以下方式修改代码,它将起作用:

if(Character.isDigit(ext.charAt(0)))
{
    ext = "_" + ext;
}
if (SupportedFileFormat.valueOf(ext.toUpperCase(Locale.US)) != null) {
    Log.i("extension", ext);
    return true;
}

基本上,代码会查看扩展是否以数字开头,如果是,我们会在开头添加下划线以确保它与我们的枚举命名约定匹配

当然,如果您只有一个字符串数组来保存支持的文件格式,而不是枚举,那会简单得多

于 2013-04-26T16:16:18.563 回答