如何获取没有Java扩展名的File对象的名称?
我试图获取没有扩展名的File
对象的名称,例如当文件名为“vegetation.txt”时获取“植被”。 我试过实现这段代码:
openFile = fileChooser.getSelectedFile(); String[] tokens = openFile.getName().split("."); String name = tokens[0];
不幸的是,它返回一个null
对象。 我想,在定义String
对象时会出现问题,因为getName()
方法正常工作; 它给我带有扩展名的文件名。
你有什么主意吗?
如果您想自己实现,请尝试以下方法:
String name = file.getName(); int pos = name.lastIndexOf("."); if (pos > 0) { name = name.substring(0, pos); }
(此变体不会为输入文件名(如“.txt”)留下空字符串。如果您希望字符串在这种情况下为空,请将> 0
更改为>= 0
)
如果您认为它使代码更具可读性,则可以使用条件表达式将if
语句替换为赋值; 以@ Steven的答案为例。 (我认为不是……但这是一个意见问题。)
使用其他人编写和测试的实现可能是更好的主意。 Apache FilenameUtils
是一个不错的选择; 请参阅@ slachnick的答案,以及链接的问答。
如果您不想自己编写此代码,可以使用Apache的FilenameUtils 。
FilenameUtils.getBaseName(openFile.getName());
这将返回文件名减去路径和扩展名。
我更喜欢在“。”的最后一个索引之前砍掉。 是文件名。 这样一个文件名:hello.test.txt就是hello.test
即
int pos = filename.lastIndexOf("."); String justName = pos > 0 ? filename.substring(0, pos) : filename;
你需要处理没有扩展。
您可以尝试split("\\.");
。 也就是说,基本上逃避了.
因为它被视为正则表达式中的所有字符。
String#split采用正则表达式。 “” 匹配任何字符,所以你得到一个空字符串数组 – 每对字符之间的每个字符一个。
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String )
你的代码有两个问题……
1)只需使用“。” 作为分裂的论据被解释为你不想要的Rejex。 你想要一个文字点。 所以你必须逃脱它……
openFile.getName().split("\\.");
2)您将错误地解析具有多个点的任何文件。 执行此操作的最佳方法是搜索最后一个点并获取子字符串…
int pos = openFile.getName().lastIndexOf("."); if(pos != -1) { String name = openFile.getName().substring(0, pos); }