明确一点,我并不是在寻找MIME类型。

假设我有以下输入:/path/to/file/foo.txt

我想要一种方法来分解这个输入,特别是扩展为.txt。在Java中有任何内置的方法来做到这一点吗?我希望避免编写自己的解析器。


当前回答

如果使用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

其他回答

从所有其他答案中可以明显看出,没有足够的“内置”函数。这是一种安全简单的方法。

String getFileExtension(File file) {
    if (file == null) {
        return "";
    }
    String name = file.getName();
    int i = name.lastIndexOf('.');
    String ext = i > 0 ? name.substring(i + 1) : "";
    return ext;
}

Java有一个内置的方法来处理这个问题,在Java .nio.file. files类中,这可能适合你的需要:

File f = new File("/path/to/file/foo.txt");
String ext = Files.probeContentType(f.toPath());
if(ext.equalsIgnoreCase("txt")) do whatever;

注意,这个静态方法使用这里找到的规范来检索“内容类型”,而“内容类型”是可以变化的。

String extension = com.google.common.io.Files.getFileExtension("fileName.jpg");
String path = "/Users/test/test.txt";
String extension = "";

if (path.contains("."))
     extension = path.substring(path.lastIndexOf("."));

返回. txt”

如果你只想要“txt”,将path.lastIndexOf(“.”)+ 1

private String getFileExtension(File file) {
    String name = file.getName();
    int lastIndexOf = name.lastIndexOf(".");
    if (lastIndexOf == -1) {
        return ""; // empty extension
    }
    return name.substring(lastIndexOf);
}