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 に答える