我似乎无法找到一种在Java中的“。”扩展名之前连接到文件名的方法,而且我不完全确定如何进行此操作。
我已经尝试过了:
String s = r + "V1";
变量r
包含myFile.txt
的值且输出为:myFile.txtV1
,但我需要实现的是myFileV1.txt
,因为我不想用相同的名称覆盖现有文件,但在写入文件时在V1
文件扩展名之前连接.
。
由于
答案 0 :(得分:9)
如果文件名可以包含多个点,您应该找到lastIndexOf
点。然后,您可以从文件名的开头创建子字符串,直到最后一个点,附加其他文本,并从最后一个点追加子字符串。
这应该可以解决问题:
int lastDot = r.lastIndexOf('.');
String s = r.substring(0,lastDot) + "V1" + r.substring(lastDot);
答案 1 :(得分:2)
查看String.indexOf()和String.substring()以拆分字符串并重建更新后的版本。
答案 2 :(得分:1)
尝试此操作(假设您的文件名中只有一个'.'
):
String[] x = r.split("\\.");
String s = x[0]+"V1."+x[1];
答案 3 :(得分:1)
另一种方法是使用Apache Commons IO的FilenameUtils类来获取文件的基本名称和扩展名。
import org.apache.commons.io.FilenameUtils;
...
File file = ...
String filename = file.getName();
String base = FilenameUtils.removeExtension(filename);
String extension = FilenameUtils.getExtension(filename);
String result = base + "-something-here" + "." + extension;
答案 4 :(得分:0)
String s = r.substring(0,r.indexOf(".")) + "V1" + r.substring(a.indexOf("."));
提醒扩展在技术上是特定于平台的。此外,您可能希望为名称和扩展名分别设置变量,并在最后将它们组合在一起。最后需要注意的是,如果文件名中有多个句点符号,则此代码将无效(例如hello.world.txt)
答案 5 :(得分:0)
基于apache commons和StringUtils.substringBeforeLast()的另一种StringUtils.substringAfterLast方法:
String newPath = StringUtils.substringBeforeLast(filePath, ".") +
"_updated." + StringUtils.substringAfterLast(filePath, ".");
注意:您仍然需要检查文件是否实际包含点字符,否则结果将不一致。