如何获取没有Java扩展名的File对象的名称?

Mic*_*alB 21 java string split file

我试图获取File没有扩展名的对象的名称,例如当文件名为"vegetation.txt"时获取"植被".我试过实现这段代码:

openFile = fileChooser.getSelectedFile();
String[] tokens = openFile.getName().split(".");
String name = tokens[0];
Run Code Online (Sandbox Code Playgroud)

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

你有什么主意吗?

Ste*_*n C 40

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

String name = file.getName();
int pos = name.lastIndexOf(".");
if (pos > 0) {
    name = name.substring(0, pos);
}
Run Code Online (Sandbox Code Playgroud)

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


if如果您认为它使您的代码更具可读性,则可以使用条件表达式将赋值替换为赋值; 比如@ Steven的回答.(我不认为它......但这是一个意见问题.)


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


sla*_*ick 20

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

FilenameUtils.getBaseName(openFile.getName());
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*ven 5

我更喜欢在"."的最后一个索引之前砍掉.是文件名.这样一个文件名:hello.test.txt就是hello.test

int pos = filename.lastIndexOf(".");
String justName = pos > 0 ? filename.substring(0, pos) : filename;
Run Code Online (Sandbox Code Playgroud)

你需要处理没有扩展.