为了清楚起见,我不是在寻找MIME类型.
假设我有以下输入: /path/to/file/foo.txt
我想要一种方法来打破这种输入,特别.txt是扩展.在Java中有没有内置的方法来做到这一点?我想避免编写自己的解析器.
Jua*_*jas 622
在这种情况下,使用FilenameUtils.getExtension从Apache的百科全书IO
以下是如何使用它的示例(您可以指定完整路径或仅指定文件名):
String ext1 = FilenameUtils.getExtension("/path/to/file/foo.txt"); // returns "txt"
String ext2 = FilenameUtils.getExtension("bar.exe"); // returns "exe"
Run Code Online (Sandbox Code Playgroud)
Ebo*_*ike 291
你真的需要一个"解析器"吗?
String extension = "";
int i = fileName.lastIndexOf('.');
if (i > 0) {
extension = fileName.substring(i+1);
}
Run Code Online (Sandbox Code Playgroud)
假设您正在处理类似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);
}
Run Code Online (Sandbox Code Playgroud)
luk*_*985 93
private String getFileExtension(File file) {
String name = file.getName();
int lastIndexOf = name.lastIndexOf(".");
if (lastIndexOf == -1) {
return ""; // empty extension
}
return name.substring(lastIndexOf);
}
Run Code Online (Sandbox Code Playgroud)
Jea*_*ean 82
如果您使用Guava库,则可以使用Files实用程序类.它有一个特定的方法,getFileExtension().例如:
String path = "c:/path/to/file/foo.txt";
String ext = Files.getFileExtension(path);
System.out.println(ext); //prints txt
Run Code Online (Sandbox Code Playgroud)
此外,您还可以获取具有类似函数的文件名getNameWithoutExtension():
String filename = Files.getNameWithoutExtension(path);
System.out.println(filename); //prints foo
Run Code Online (Sandbox Code Playgroud)
int*_*dis 27
如果在Android上,您可以使用此:
String ext = android.webkit.MimeTypeMap.getFileExtensionFromUrl(file.getName());
Run Code Online (Sandbox Code Playgroud)
Syl*_*oux 14
为了在点之前考虑没有字符的文件名,您必须使用接受答案的轻微变化:
String extension = "";
int i = fileName.lastIndexOf('.');
if (i >= 0) {
extension = fileName.substring(i+1);
}
Run Code Online (Sandbox Code Playgroud)
"file.doc" => "doc"
"file.doc.gz" => "gz"
".doc" => "doc"
Run Code Online (Sandbox Code Playgroud)
yav*_*vus 13
这是一种经过测试的方法
public static String getExtension(String fileName) {
char ch;
int len;
if(fileName==null ||
(len = fileName.length())==0 ||
(ch = fileName.charAt(len-1))=='/' || ch=='\\' || //in the case of a directory
ch=='.' ) //in the case of . or ..
return "";
int dotInd = fileName.lastIndexOf('.'),
sepInd = Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\'));
if( dotInd<=sepInd )
return "";
else
return fileName.substring(dotInd+1).toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)
和测试用例:
@Test
public void testGetExtension() {
assertEquals("", getExtension("C"));
assertEquals("ext", getExtension("C.ext"));
assertEquals("ext", getExtension("A/B/C.ext"));
assertEquals("", getExtension("A/B/C.ext/"));
assertEquals("", getExtension("A/B/C.ext/.."));
assertEquals("bin", getExtension("A/B/C.bin"));
assertEquals("hidden", getExtension(".hidden"));
assertEquals("dsstore", getExtension("/user/home/.dsstore"));
assertEquals("", getExtension(".strange."));
assertEquals("3", getExtension("1.2.3"));
assertEquals("exe", getExtension("C:\\Program Files (x86)\\java\\bin\\javaw.exe"));
}
Run Code Online (Sandbox Code Playgroud)
Ebr*_*owi 10
我的脏,可能最小的使用String.replaceAll:
.replaceAll("^.*\\.(.*)$", "$1")
Run Code Online (Sandbox Code Playgroud)
请注意,首先*是贪婪,所以它会尽可能地抓取大多数可能的字符,然后只剩下最后一个点和文件扩展名.
从所有其他答案中可以明显看出,没有足够的"内置"功能.这是一种安全而简单的方法.
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;
}
Run Code Online (Sandbox Code Playgroud)
小智 9
如果您在项目中使用 Spring 框架,那么您可以使用StringUtils
import org.springframework.util.StringUtils;
StringUtils.getFilenameExtension("YourFileName")
Run Code Online (Sandbox Code Playgroud)
从 Java 20 EA(早期访问)开始,终于有一个新方法Path#getExtension将扩展名返回为String:
Paths.get("/Users/admin/notes.txt").getExtension(); // "txt"
Paths.get("/Users/admin/.gitconfig").getExtension(); // "gitconfig"
Paths.get("/Users/admin/configuration.xml.zip").getExtension(); // "zip"
Paths.get("/Users/admin/file").getExtension(); // null
Run Code Online (Sandbox Code Playgroud)
怎么样(使用Java 1.5 RegEx):
String[] split = fullFileName.split("\\.");
String ext = split[split.length - 1];
Run Code Online (Sandbox Code Playgroud)
如果你打算使用Apache commons-io,只想检查文件的扩展名然后做一些操作,你可以使用它,这里是一个片段:
if(FilenameUtils.isExtension(file.getName(),"java")) {
someoperation();
}
Run Code Online (Sandbox Code Playgroud)
String path = "/Users/test/test.txt"
String extension = path.substring(path.lastIndexOf("."), path.length());
Run Code Online (Sandbox Code Playgroud)
返回“ .txt”
如果只需要“ txt”,请 path.lastIndexOf(".") + 1
小智 5
这是Java 8的另一种形式。
String ext = Arrays.stream(fileName.split("\\.")).reduce((a,b) -> b).orElse(null)
Run Code Online (Sandbox Code Playgroud)
其工作方式如下: