明确一点,我并不是在寻找MIME类型。
假设我有以下输入:/path/to/file/foo.txt
我想要一种方法来分解这个输入,特别是扩展为.txt。在Java中有任何内置的方法来做到这一点吗?我希望避免编写自己的解析器。
明确一点,我并不是在寻找MIME类型。
假设我有以下输入:/path/to/file/foo.txt
我想要一种方法来分解这个输入,特别是扩展为.txt。在Java中有任何内置的方法来做到这一点吗?我希望避免编写自己的解析器。
当前回答
如果你在项目中使用Spring框架,那么你可以使用StringUtils
import org.springframework.util.StringUtils;
StringUtils.getFilenameExtension("YourFileName")
其他回答
我喜欢spectre简单的回答,在他的一个评论中有一个链接到另一个由EboMike提出的问题,它修复了文件路径中的点。
在不实现某种第三方API的情况下,我建议:
private String getFileExtension(File file) {
String name = file.getName().substring(Math.max(file.getName().lastIndexOf('/'),
file.getName().lastIndexOf('\\')) < 0 ? 0 : Math.max(file.getName().lastIndexOf('/'),
file.getName().lastIndexOf('\\')));
int lastIndexOf = name.lastIndexOf(".");
if (lastIndexOf == -1) {
return ""; // empty extension
}
return name.substring(lastIndexOf + 1); // doesn't return "." with extension
}
类似的东西在ImageIO的任何写入方法中都可能有用,其中必须传入文件格式。
既然可以自己动手,为什么还要使用整个第三方API呢?
下面是Java 8的另一个一行程序。
String ext = Arrays.stream(fileName.split("\\.")).reduce((a,b) -> b).orElse(null)
其工作原理如下:
使用"."将字符串拆分为字符串数组。 将数组转换为流 使用reduce获取流的最后一个元素,即文件扩展名
下面是返回值为Optional的版本(因为你不能确定文件有扩展名)…还有健全检查…
import java.io.File;
import java.util.Optional;
public class GetFileExtensionTool {
public static Optional<String> getFileExtension(File file) {
if (file == null) {
throw new NullPointerException("file argument was null");
}
if (!file.isFile()) {
throw new IllegalArgumentException("getFileExtension(File file)"
+ " called on File object that wasn't an actual file"
+ " (perhaps a directory or device?). file had path: "
+ file.getAbsolutePath());
}
String fileName = file.getName();
int i = fileName.lastIndexOf('.');
if (i > 0) {
return Optional.of(fileName.substring(i + 1));
} else {
return Optional.empty();
}
}
}
在这里我做了一个小方法(然而不是那么安全,并没有检查很多错误),但如果只有你在编写一个普通的java程序,这就足够找到文件类型了。这对于复杂的文件类型并不适用,但这些文件类型通常不常用。
public static String getFileType(String path){
String fileType = null;
fileType = path.substring(path.indexOf('.',path.lastIndexOf('/'))+1).toUpperCase();
return fileType;
}
JFileChooser怎么样?这并不简单,因为你需要解析它的最终输出…
JFileChooser filechooser = new JFileChooser();
File file = new File("your.txt");
System.out.println("the extension type:"+filechooser.getTypeDescription(file));
这是一个MIME类型…
好吧……我忘了你不想知道它的MIME类型。
下面链接中的有趣代码: http://download.oracle.com/javase/tutorial/uiswing/components/filechooser.html
/*
* 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;
}
相关问题: 我如何修剪一个文件扩展名从一个字符串在Java?