2011-02-04 83 views
41

在我的應用程序中,當我們從sdcard中瀏覽文件時,文件將是.text,.jpg和mpeg4ie視頻文件。我想將每個文件類型存儲到一個特定的文件夾中。例如,.text文件轉到文本文件夾。我的問題是當我選擇文件時,如何檢查文件擴展名?如何在android中檢查文件擴展名

回答

63

我將文件名稱作爲一個字符串,將其拆分爲一個「。」數組。作爲分隔符,然後獲取數組的最後一個索引,這將是文件擴展名。例如:

public class main { 
    public static void main(String[] args) { 
     String filename = "image.jpg"; 
     String filenameArray[] = filename.split("\\."); 
     String extension = filenameArray[filenameArray.length-1]; 
     System.out.println(extension); 
    } 
} 

,輸出:

jpg 
+41

假設擴展名存在,我寧願使用filename.substring(filename.lastIndexOf('。')+ 1)來獲得擴展名。使用正則表達式這樣簡單的東西是矯枉過正的(而且速度較慢)。 – 2012-04-01 20:27:15

+4

rrrrrray,你知道他們說什麼假設... – 2012-04-01 20:55:31

+5

我試圖解決的問題是不使用正則表達式來完成像這樣的簡單任務,而不是錯誤檢查。 – 2012-04-01 21:15:34

2

還沒有機會來運行這個(所以可能無法正常工作100%),但它應該是你在找什麼:

File files[] = Environment.getExternalStorageDirectory().listFiles(); 
for (File f : files) 
{ 
    String fullPath = f.getAbsolutePath(); 
    int dot = fullPath.lastIndexOf("."); 
    String ext = fullPath.substring(dot + 1); 
    if(ext.equalsIgnoreCase("txt")) // make sure case is irrelevant for your use case; otherwise use ext.equals("txt") 
    { 
    //do something with f here 
    } 
} 
+0

Thanx很多Mike和Brenden, – 2011-02-04 09:26:00

+1

'if(ext.equals(txt))''而不是'if(ext ==「txt」)' – IHeartAndroid 2014-05-12 08:05:50

4

你也可以做下面的事情並使用endswith。

public void walkdir(File dir) { 
    String txtPattern = ".txt"; 
    String jpgPattern = ".jpg"; 
    String mp3Pattern = ".mp3"; 

    File listFile[] = dir.listFiles(); 

    if (listFile != null) { 
     for (int i = 0; i < listFile.length; i++) { 

      if (listFile[i].isDirectory()) { 
       walkdir(listFile[i]); 
      } else { 
       if (listFile[i].getName().endsWith(txtPattern)){ 
            //put in txt folder 
           }else if (listFile[i].getName().endsWith(jpgPattern.toLowerCase())){ 
            // put in jpg folder 
           }else if (istFile[i].getName().endsWith(mp3Pattern.toLowerCase())) { 
            // put in mp3 folder 
       } 
      } 
     } 
    } 

} 

對不起,沒有檢查工作,但它應該爲你做。

18

,或者你可能只是做

MimeTypeMap.getFileExtensionFromUrl(myfile.toURL().toString()); 

注意:這個方法並不十分可靠,但..

45
public static String getFileExt(String fileName) {  
    return fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()); 
} 
0

如果你想獲得所有具有特定擴展名的特定文件目錄:

File[] files = (new File("/sdcard/yourDirectory/").listFiles(new CustomFilter()); 

.... 


class CustomFilter implements FileFilter 
    { 
//Add the file extensions you want to look for here: 
     private String[] extension = 
             { "text", "jpg", "jpeg", "mpeg" }; 

     @Override 
     public boolean accept(File pathname) 
     { 
      String name = pathname.getName().toLowerCase(); 

      for (String anExt : extension) 
      { 

       if (name.endsWith(anExt)) 
       { 
// A file has been detected with that extension 
        return true; 

       } 
      } 
      return false; 
     } 

    } 
1

我發現很好的例子在docs.oracle.com如何獲得文件擴展名retu小寫RN文件類型的擴展名或空,如果沒有文件擴展名:

/* 
    * Get the extension of a file. 
    */ 
    public static String getExtension(File f) { 
     String ext = null; 
     String s = f.getName(); 
     int i = s.lastIndexOf('.'); 

     if (i > 0 && i < s.length() - 1) { 
      ext = s.substring(i + 1).toLowerCase(); 
     } 
     return ext; 
    } 
2

這個工作對我來說:

​​

當文件/mnt/sdcard/boomerang/2013-06-18_12:08:53.txt"txt"返回。

請注意URLEncoder.encode.repalce調用應解決您在單獨調用MimeTypeMap.getFileExtensionFromUrl時可能會看到的任何可靠性問題。例如,如果沒有編碼和替換調用,文件名(例如"Test Image!.jpg")會返回空字符串。還要確保文件名是小寫。它MimeTypeMap似乎沒有.PNG.JPG的條目。

0
public String getExtension(File file) { 
     String fileName = file.getName(); 
     try { 
      if (fileName.contains("\\.")) { 
       String filenameArray[] = fileName.split("\\."); 
       extension = filenameArray[filenameArray.length - 1]; 
      } else { 
       extension = "dir"; 
      } 
     } catch (Exception e) { 
      extension = "err"; 
     } 
     return extension; 
    } 
1

找到文件擴展名的最簡單方式是使用lastIndexOf('.'),假定文件的名稱中包含擴展名。請檢查下面的代碼

String fileName = "test.jpg"; 
int i = fileName.lastIndexOf('.'); 
String fileExtension = fileName.substring(i+1); 
Log.v("FILE EXTENSION: ",fileExtension); 
14

您可以使用FilenameUtils阿帕奇百科全書

String extension = FilenameUtils.getExtension(mFile.getName()); 
0

下面是測試所有的情況下

String getExtension(String fileName){ 
     final String emptyExtension = ""; 
     if(fileName == null){ 
      return emptyExtension; 
     } 
     int index = fileName.lastIndexOf("."); 
     if(index == -1){ 
      return emptyExtension; 
     } 
     return fileName.substring(index + 1); 
    } 
0

東西是一個方法.endsWith (「您的分機」)

String whatever = you String; 

if(whatever.endsWith("jpg")){ 
    // your jpg code 
}else if(whatever.endsWith("png")){ 
// your png code 
}