明确一点,我并不是在寻找MIME类型。
假设我有以下输入:/path/to/file/foo.txt
我想要一种方法来分解这个输入,特别是扩展为.txt。在Java中有任何内置的方法来做到这一点吗?我希望避免编写自己的解析器。
明确一点,我并不是在寻找MIME类型。
假设我有以下输入:/path/to/file/foo.txt
我想要一种方法来分解这个输入,特别是扩展为.txt。在Java中有任何内置的方法来做到这一点吗?我希望避免编写自己的解析器。
当前回答
如果在Android上,你可以使用这个:
String ext = android.webkit.MimeTypeMap.getFileExtensionFromUrl(file.getName());
其他回答
只是一个基于正则表达式的替代方案。没那么快,也没那么好。
Pattern pattern = Pattern.compile("\\.([^.]*)$");
Matcher matcher = pattern.matcher(fileName);
if (matcher.find()) {
String ext = matcher.group(1);
}
如果使用Guava库,可以求助于Files实用程序类。它有一个特定的方法getFileExtension()。例如:
String path = "c:/path/to/file/foo.txt";
String ext = Files.getFileExtension(path);
System.out.println(ext); //prints txt
另外,你也可以用类似的函数getNameWithoutExtension()获取文件名:
String filename = Files.getNameWithoutExtension(path);
System.out.println(filename); //prints foo
如何(使用Java 1.5 RegEx):
String[] split = fullFileName.split("\\.");
String ext = split[split.length - 1];
你真的需要一个“解析器”吗?
String extension = "";
int i = fileName.lastIndexOf('.');
if (i > 0) {
extension = fileName.substring(i+1);
}
假设您正在处理简单的类似windows的文件名,而不是像archive.tar.gz这样的文件名。
顺便说一下,对于目录可能有一个'。',但文件名本身没有(像/path/to.a/file),你可以这样做
String extension = "";
int i = fileName.lastIndexOf('.');
int p = Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\'));
if (i > p) {
extension = fileName.substring(i+1);
}
private String getExtension(File file)
{
String fileName = file.getName();
String[] ext = fileName.split("\\.");
return ext[ext.length -1];
}