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中获取没有扩展名的文件对象的名称? [复制]的主要内容,如果未能解决你的问题,请参考以下文章