2013-04-26 45 views
0

我在特定分機上的SD卡上的文件夾中檢查我的文件。一切都很順利,除了.3gp文件似乎沒有被這個代碼識別,儘管它被列在可能的格式中。任何想法可能會造成這種情況?擴展格式未檢測到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; 
} 
+1

事做下劃線吧? 「_3GP」 – musefan 2013-04-26 16:13:50

+0

是的,這是我的想法,但如果我刪除下劃線,它給我一個語法錯誤「令牌上的語法錯誤」3「,刪除這個令牌」 – 2013-04-26 16:16:09

回答

1

我會說這是因爲_(下劃線)的枚舉名字,它是無法找到匹配。我假設這是因爲枚舉名稱不能以數字開頭。或許,如果你修改代碼如下它將工作:

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

基本上,代碼是想看看是否擴展以數字開頭,如果這樣做,我們添加一個下劃線開始,以確保它與匹配我們枚舉命名約定

當然,這將是一個簡單得多,如果你只是有一個字符串數組來保存您的支持的文件格式,而不是一個枚舉

+0

這的確是這樣!你的解決方案聽起來很邏輯..你認爲帶有一串字符串的解決方案會更快,或者沒有關係? @musefan – 2013-04-26 16:23:14

+0

@MatthiasVanb:我不確定它會不會更快,它可能不會有太大的不同。但這意味着你不必擔心下劃線。做你覺得更舒服的做法,而且更容易理解 – musefan 2013-04-26 16:24:53