在Java中,如何在没有扩展名的情况下获取文件对象的名称?

在Java中,如何在没有扩展名的情况下获取文件对象的名称?,java,string,file,split,Java,String,File,Split,我试图获取一个文件对象的名称,但不包含其扩展名,例如,当文件名为“vegetation.txt”时获取“vegetation”。我尝试实现以下代码: openFile = fileChooser.getSelectedFile(); String[] tokens = openFile.getName().split("."); String name = tokens[0]; 不幸的是,它返回一个null对象。我想,仅仅是在定义字符串对象时就出现了问题,因为方法getName()工作正常;它

我试图获取一个
文件
对象的名称,但不包含其扩展名,例如,当文件名为“vegetation.txt”时获取“vegetation”。我尝试实现以下代码:

openFile = fileChooser.getSelectedFile();
String[] tokens = openFile.getName().split(".");
String name = tokens[0];
不幸的是,它返回一个
null
对象。我想,仅仅是在定义
字符串
对象时就出现了问题,因为方法
getName()
工作正常;它给我文件名及其扩展名


你知道吗?

我宁愿在“.”作为文件名的最后一个索引之前切掉。 这样,文件名:hello.test.txt就是hello.test

i、 e

您还需要处理没有扩展名的问题。

您可以尝试
split(\\)。也就是说,基本上对
进行转义,因为它被视为正则表达式中的所有字符。

String#split接受正则表达式。“.”匹配任何字符,因此您将得到一个空字符串数组-每对字符之间的每个点对应一个空字符串


)您的代码有两个问题

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

openFile.getName().split("\\.");
2) 您将错误地解析任何带有多个点的文件。最好的方法是搜索最后一个点并得到子字符串

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

如果您想自己实现此功能,请尝试以下方法:

String name = file.getName();
int pos = name.lastIndexOf(".");
if (pos > 0) {
    name = name.substring(0, pos);
}
(此变体不会为输入文件名“.txt”留下空字符串。如果您希望在这种情况下字符串为空,请将
>0
更改为
>=0


如果认为
if
语句使代码更具可读性,可以使用条件表达式将其替换为赋值;例如,见@Steven的答案。(我认为没有……但这是一个意见问题。)



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

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


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

这应该是这个问题的最佳答案。如果文件名包含点:
some.a-b.here.txt,则此选项不起作用。如果文件名包含点:
some.a-b.here.txt,则此选项不起作用。
String name = file.getName();
int pos = name.lastIndexOf(".");
if (pos > 0) {
    name = name.substring(0, pos);
}
FilenameUtils.getBaseName(openFile.getName());