如何獲取Java文件的文件擴展名?

爲了清楚起見,我不是在尋找MIME類型。 html

假設我輸入如下內容: /path/to/file/foo.txt java

我想要一種分解此輸入的方法,特別是將擴展名分解爲.txt 。 在Java中是否有任何內置方法能夠作到這一點? 我想避免編寫本身的解析器。 git


#1樓

怎麼樣(使用Java 1.5 RegEx): github

String[] split = fullFileName.split("\\.");
    String ext = split[split.length - 1];

#2樓

若是使用Guava庫,則能夠使用Files實用程序類。 它具備特定的方法getFileExtension() 。 例如: web

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

#3樓

這是一種能夠正確處理.tar.gz的方法,即便在目錄名稱中包含點的路徑中也是如此: apache

private static final String getExtension(final String filename) {
  if (filename == null) return null;
  final String afterLastSlash = filename.substring(filename.lastIndexOf('/') + 1);
  final int afterLastBackslash = afterLastSlash.lastIndexOf('\\') + 1;
  final int dotIndex = afterLastSlash.indexOf('.', afterLastBackslash);
  return (dotIndex == -1) ? "" : afterLastSlash.substring(dotIndex + 1);
}

afterLastSlash的建立是爲了使afterLastBackslash查找更快,由於若是其中包含一些斜槓,則沒必要搜索整個字符串。 api

原始String內的char[]被重用,並無在其中添加任何垃圾, JVM可能會注意到afterLastSlash當即成爲垃圾,以便將其放入堆棧而不是堆中maven


#4樓

在這種狀況下,請使用Apache Commons IO的 FilenameUtils.getExtension 函數

這是一個使用方法的示例(您能夠指定完整路徑或僅指定文件名):

String ext1 = FilenameUtils.getExtension("/path/to/file/foo.txt"); // returns "txt"
String ext2 = FilenameUtils.getExtension("bar.exe"); // returns "exe"

Maven的依賴:

<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.6</version>
</dependency>

Gradle Groovy DSL

implementation 'commons-io:commons-io:2.6'

Gradle Kotlin DSL

implementation("commons-io:commons-io:2.6")

其餘https://search.maven.org/artifact/commons-io/commons-io/2.6/jar


#5樓

只是基於正則表達式的選擇。 沒有那麼快,沒有那麼好。

Pattern pattern = Pattern.compile("\\.([^.]*)$");
Matcher matcher = pattern.matcher(fileName);

if (matcher.find()) {
    String ext = matcher.group(1);
}
相關文章
相關標籤/搜索