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

时间:2011-12-06 00:31:05

标签: java string file split

我正在尝试获取没有其扩展名的File对象的名称,例如文件名是“vegetation.txt”时得到“植被”。我试过实现这段代码:

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

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

你有什么想法吗?

6 个答案:

答案 0 :(得分:40)

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

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

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


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


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

答案 1 :(得分:19)

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

FilenameUtils.getBaseName(openFile.getName());

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

答案 2 :(得分:5)

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

即。

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

你需要处理没有扩展名。

答案 3 :(得分:2)

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

答案 4 :(得分:2)

String#split采用正则表达式。 “”匹配任何字符,所以你得到一个空字符串数组 - 每对字符之间的每个字符一个。

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

答案 5 :(得分:2)

您的代码存在两个问题......

1)只需使用“。”作为分裂的论据被解释为你不想要的Rejex。你想要一个文字点。所以你必须逃脱它......

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

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

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