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

在我的应用程序中,当我们从SD卡浏览文件时,文件将是.text,.jpg和mpeg4ievideo文件。 我想将每个文件types存储到一个特定的文件夹。 例如,.text文件转到文本文件夹。 我的问题是当我select文件,我如何检查文件扩展名?

我会得到一个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 
 public static String getFileExt(String fileName) { return fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()); } 

或者你可以做

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

注意:这个方法虽然不是很可靠

您可以使用Apache Commons中的 FilenameUtils :

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

你也可以做下面的事情,并使用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 } } } } } 

对不起,没有检查工作,但它应该为你做。

这适用于我:

 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时可能会看到的任何可靠性问题。 例如,如果没有编码和replace调用, "Test Image!.jpg"等文件名将返回空string。 还要确保文件名是小写的。 它MimeTypeMap似乎没有.PNG.JPG条目。

没有机会运行这个(所以可能无法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 } } 

我在docs.oracle.com上find了很好的例子,如何得到文件扩展名,返回小写的文件types扩展名,如果没有文件扩展名,则返回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; } 

find文件扩展名的最短途径是使用lastIndexOf('.')假定文件名包含扩展名。 检查下面的代码

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

如果您想要获取在特定目录中具有特定扩展名的所有文件,请执行以下操作:

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

这是一个testing所有情况的方法

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

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

 String whatever = you String; if(whatever.endsWith("jpg")){ // your jpg code }else if(whatever.endsWith("png")){ // your png code }