如何在android中检查文件扩展名

时间:2011-02-04 05:32:36

标签: android

在我的应用程序中,当我们从sdcard浏览文件时,文件将是.text,.jpg和mpeg4ie视频文件。我想将每种文件类型存储到特定文件夹中。例如,.text文件转到文本文件夹。我的问题是当我选择文件时,如何检查文件扩展名?

14 个答案:

答案 0 :(得分:65)

我将文件名作为String,将其拆分为带有“。”的数组。作为分隔符,然后获取数组的最后一个索引,这将是文件扩展名。例如:

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

答案 1 :(得分:47)

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

答案 2 :(得分:19)

或者你可以做到

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

注意:虽然这种方法不太可靠..

答案 3 :(得分:14)

您可以使用 Apache Commons 中的FilenameUtils

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

答案 4 :(得分: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
              }
            }
        }
    }

}

很抱歉,没有检查过这项工作,但它应该为你做。

答案 5 :(得分: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
  } 
 }  

答案 6 :(得分:2)

这对我有用:

public static String getExtension(String fileName) {
    String encoded;
    try { encoded = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20"); }
    catch(UnsupportedEncodingException e) { encoded = fileName; }
    return MimeTypeMap.getFileExtensionFromUrl(encoded).toLowerCase();
}

当文件为/mnt/sdcard/boomerang/2013-06-18_12:08:53.txt时,会返回"txt"

请注意,URLEncoder.encode.repalce调用应修复在MimeTypeMap.getFileExtensionFromUrl自行调用时可能会遇到的任何可靠性问题。例如,如果没有编码和替换调用,"Test Image!.jpg"等文件名将返回空字符串。还要确保文件名是小写的。它MimeTypeMap似乎没有.PNG.JPG的条目。

答案 7 :(得分:1)

我在docs.oracle.com找到了很好的示例如何获得以小写形式返回文件类型扩展名的文件扩展名,如果没有文件扩展名则返回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;
    }

答案 8 :(得分:1)

找出文件扩展名的最短方法是使用lastIndexOf('.'),假设文件名包含扩展名。请检查以下代码

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

答案 9 :(得分: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;
        }

    }

答案 10 :(得分: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;
    }

答案 11 :(得分: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);
    }

答案 12 :(得分:0)

  

东西是.endsWith(“你的扩展名”)

String whatever = you String;

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

答案 13 :(得分:-1)

onclick(View view){
GetFileExtension(videouri);
Toast.makeText(this, "Exten: "+GetFileExtension(videouri), Toast.LENGTH_SHORT).show();

}

 // Get Extension
public String GetFileExtension(Uri uri){

        ContentResolver contentResolver=getContentResolver();
        MimeTypeMap mimeTypeMap=MimeTypeMap.getSingleton();

        // Return file Extension
        return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));

    }

这里的视频变量有一个视频,我的意思是

videouri=data.getData();

在onResultActivity下。 您可以在此处传递任何变量,例如图像,视频,mp3和文件/文档。 它适用于所有类型的内容。

它的公司代码主要用于商业目的。

我100%肯定,它会自信地工作.....

如果你喜欢这个,那就投票给我