Java:将文件名拆分为基础和扩展名

标签 java file

有没有比之类的更好的方法来获取文件基名和扩展名

File f = ...
String name = f.getName();
int dot = name.lastIndexOf('.');
String base = (dot == -1) ? name : name.substring(0, dot);
String extension = (dot == -1) ? "" : name.substring(dot+1);

最佳答案

我知道其他人提到了 String.split,但这里有一个变体,只产生 两个 标记(基础和扩展):

String[] tokens = fileName.split("\\.(?=[^\\.]+$)");

例如:

"test.cool.awesome.txt".split("\\.(?=[^\\.]+$)");

产量:

["test.cool.awesome", "txt"]

正则表达式告诉 Java 在任何句点上拆分,然后是任意数量的非句点,然后是输入的结尾。只有一个时期符合这个定义(即last时期)。

技术上 从正则来说,这种技术称为 zero-width positive lookahead .


顺便说一句,如果您想拆分路径并获取完整的文件名,包括但不限于点扩展名,请使用带有正斜杠的路径,

    String[] tokens = dir.split(".+?/(?=[^/]+$)");

例如:

    String dir = "/foo/bar/bam/boozled"; 
    String[] tokens = dir.split(".+?/(?=[^/]+$)");
    // [ "/foo/bar/bam/" "boozled" ] 

关于Java:将文件名拆分为基础和扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4545937/

相关文章:

file - Gradle - 将文件夹从 ABC move 到 XYZ

file - 如何从 Mercurial .hg/store/data/恢复文件

python - 在 python 中与 open() 一起使用后,打开的文件如何无法通过eek(0)倒回

java - java.lang.NoClassDefFoundError:org.apache.hadoop.hbase.HBaseConfiguration

java - 从菜单中选择帮助(警报对话框)选项时,应用程序停止工作

java - 在 .war 文件下创建一个 java-properties 文件

php包含文件执行失败

java - Spring boot中ServletRegistrationBean和ControllerAdvice冲突

java - android.view.InflateException : Binary XML file line #27: android. support.design.widget.TextInputEditText 无法转换为 android.view.ViewGroup

java - Android - 如何通过文件名获取文件?