如何在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 }