java - 如何在Java中获取没有扩展名的文件对象的名称? [复制]

Posted

技术标签:

【中文标题】java - 如何在Java中获取没有扩展名的文件对象的名称? [复制]【英文标题】:How to get name of File object without its extension in Java? [duplicate] 【发布时间】:2012-01-13 16:43:58 【问题描述】:

我正在尝试获取不带扩展名的 File 对象的名称,例如当文件名是“vegetation.txt”时得到“vegetation”。我已尝试实现此代码:

openFile = fileChooser.getSelectedFile();
String[] tokens = openFile.getName().split(".");
String name = tokens[0];

不幸的是,它返回一个null 对象。我猜在定义String 对象时存在问题,因为getName() 方法工作正常;它给了我带有扩展名的文件名。

你有什么想法吗?

【问题讨论】:

【参考方案1】:

如果你想自己实现,试试这个:

String name = file.getName();
int pos = name.lastIndexOf(".");
if (pos > 0) 
    name = name.substring(0, pos);

(此变体不会为“.txt”之类的输入文件名留下空字符串。如果在这种情况下您希望字符串为空,请将> 0 更改为>= 0。)


您可以使用条件表达式将if 语句替换为赋值语句,如果您认为这会使您的代码更具可读性;例如,请参阅@Steven 的答案。 (我不认为是这样......但这是一个见仁见智的问题。)


使用其他人编写和测试过的实现可以说是一个更好的主意。 ApacheFilenameUtils 是一个不错的选择;请参阅@slachnick 的回答,以及链接的问答。

【讨论】:

【参考方案2】:

如果您不想自己编写此代码,可以使用 Apache 的 FilenameUtils。

FilenameUtils.getBaseName(openFile.getName());

这将返回文件名减去路径和扩展名。

【讨论】:

【参考方案3】:

我更喜欢在“。”的最后一个索引之前切断。成为文件名。 这样一个文件名:hello.test.txt 就是 hello.test

int pos = filename.lastIndexOf(".");
String justName = pos > 0 ? filename.substring(0, pos) : filename;

你也需要处理没有扩展名。

【讨论】:

【参考方案4】:

你的代码有两个问题...

1) 只使用“。”作为 split 的参数被解释为您不想要的拒绝。你想要一个文字点。所以你必须逃避它......

openFile.getName().split("\\.");

2) 您将错误地解析任何包含多个点的文件。最好的方法是搜索最后一个点并获取子字符串...

int pos = openFile.getName().lastIndexOf(".");
if(pos != -1) 
   String name = openFile.getName().substring(0, pos);

【讨论】:

这应该是这个问题的最佳答案。 如果文件名包含点则不起作用:some.a-b.here.txt【参考方案5】:

String#split 采用正则表达式。 “。”匹配任何字符,因此您会得到一个空字符串数组 - 每对字符之间的每个位置都有一个空字符串。

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)

【讨论】:

【参考方案6】:

你可以试试split("\\.");。也就是说,基本上转义了.,因为它被视为正则表达式中的所有字符。

【讨论】:

如果文件名包含点则不起作用:some.a-b.here.txt

以上是关于java - 如何在Java中获取没有扩展名的文件对象的名称? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java中属性文件中配置的参数如何获取值,求高手

请问用java如何获取下载文件的文件名?

如何使用Java在camunda流程引擎上获取扩展属性

用Java实现获取文件类型的方法。

在java中获取文件扩展名[重复]

在java中确定文件的实际内容类型[重复]