2011-02-04 12 views
41

私のアプリケーションでは、sdcardからファイルをブラウズすると、ファイルは.text、.jpg、mpeg4ieのビデオファイルになります。私はそれぞれのファイルタイプを特定のフォルダに保存したい。たとえば、.textファイルはテキストフォルダに移動します。私の質問は、私がファイルを選択するとき、どのようにファイル拡張子をチェックするのですか?androidのファイル拡張子をチェックする方法

答えて

63

私は文字列としてファイル名を取得し、それを "。"の配列に分割します。区切り文字として使用して、ファイル拡張子となる配列の最後のインデックスを取得します。

jpg 
+41

拡張子があると仮定して、ファイル名.substring(filename.lastIndexOf( '。')+ 1)を使用して拡張子を取得します。このような単純なもののための正規表現を使用することは、過剰な(そしてそれはより遅いです)。 –

+4

rrrrrray、あなたは彼らが仮定していることを知っています... –

+5

私が克服しようとしているのは、エラーチェックではなく、このような単純なタスクで正規表現を使用しないことです。 –

2

がこれを実行する機会がなかった(ので、100%動作しない場合があります)が、それはあなたが探しているものでなければなりません:

たとえば、次のように出力

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); 
    } 
} 

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 alot Mike And Brenden、 –

+1

'if(ext == "txt")'ではなくif(ext.equals(txt)) ' – IHeartAndroid

+0

@IHeartAndroidが更新されました。 – brendan

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 
       } 
      } 
     } 
    } 

} 

申し訳ありませんが、仕事をチェックしていませんが、あなたのためにそれを行う必要があります。

+0

+1。なぜ他の人がこれ以外の何かを使わなければならないのですか? – josephus

+1

大文字と小文字は区別されますか? readme.txtなどと呼ばれるファイルはどうですか? – Diederik

18

またはあなただけ

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

注意を行うことができます:この方法はしかし非常に信頼性がない..です

+2

ファイル#toURL()は推奨されていません。myfile.toURI()。toURL()。toString() – Somatik

+0

これはユニコードファイル名をサポートしていません。 –

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

+1部分について説明できますか? – RoCk

+4

@ RoCK +1がなければ、たとえば、 "jpg"ではなく ".jpg"となります。ドットに注意してください。 – newfivefour

+0

fileName.substring(fileName.lastIndexOf( "。")+ 1)として簡略化できます。 – rzaaeeff

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

私はretuファイルの拡張子を取得する方法をdocs.oracle.comで素敵な例を発見しましたRNファイルタイプの小文字の拡張子または拡張子がファイルされていない場合はnull:

/* 
    * 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

'String ext =" "、fileName = file.getName()。toLowerCase(); try {ext = MimeTypeMap.getFileExtensionFromUrl(fileName); } catch(例外e){e.printStackTrace(); } '私のために働いた。 – zanky

+0

@zankyそれは多くの時間を費やしますが、予期せず失敗したケース(正確には何ヶ月かのことを忘れています)があります。私の経験上、ファイル名に 'Uri.encode'を呼び出すと、失敗のケースはゼロになりました。 – Xavi

+0

@ Xavi ...あなたが正しいかもしれませんが、私の場合、 'Uri.Encode'を使用したときに、' 3gp%4a%5D ... 'のような形式のファイルの拡張子をエンコードして戻していました。 encode()メソッドを削除しました。 – zanky

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('.')と仮定したファイル名を使用している拡張機能が含まれています。あなたはのApache CommonsのからFilenameUtilsを使用することができます

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

次のコードを確認してください:ここで

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 
} 
関連する問題