我似乎無法找到在Java中的「。」擴展名之前連接到文件名的方法,我不完全確定我會如何去做這件事。在Java中的'。'文件名擴展之前連接到一個文件名
我已經嘗試:
String s = r + "V1";
其中變量r
包含myFile.txt
值和輸出是:myFile.txtV1
,但我需要實現的是myFileV1.txt
,因爲我不希望覆蓋現有文件具有相同的名稱,但在文件寫入時連接.
文件擴展名前的V1
。
感謝
我似乎無法找到在Java中的「。」擴展名之前連接到文件名的方法,我不完全確定我會如何去做這件事。在Java中的'。'文件名擴展之前連接到一個文件名
我已經嘗試:
String s = r + "V1";
其中變量r
包含myFile.txt
值和輸出是:myFile.txtV1
,但我需要實現的是myFileV1.txt
,因爲我不希望覆蓋現有文件具有相同的名稱,但在文件寫入時連接.
文件擴展名前的V1
。
感謝
如果文件名可以包含多於一個點,則應該找到lastIndexOf
點。然後,您可以從文件名的開頭到最後一個點創建子字符串,附加其他文本,並追加最後一個點的子字符串。
這應該做的伎倆:基於StringUtils.substringBeforeLast()和StringUtils.substringAfterLast
int lastDot = r.lastIndexOf('.');
String s = r.substring(0,lastDot) + "V1" + r.substring(lastDot);
感謝Pshemo,簡潔明瞭的代碼和解釋。 – Simon
看String.indexOf()和String.substring()到了分割字符串並重建你的更新版本。
試試這個(假設你只有一個'.'
在您的文件的名稱):
String[] x = r.split("\\.");
String s = x[0]+"V1."+x[1];
String s = r.substring(0,r.indexOf(".")) + "V1" + r.substring(a.indexOf("."));
提醒擴展是技術上特定的平臺。另外,您可能希望爲名稱和擴展名分別設置變量,並在最後將它們組合在一起。最後需要注意的是,如果文件名中有多個句點符號(例如hello.world.txt),此代碼將不起作用
另一種方法是使用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;
這裏只有gotcha是如果你的文件名缺少擴展名,那麼你添加了一個尾隨點「。」。這很可能是不希望的。 –
另apache commons方法:
String newPath = StringUtils.substringBeforeLast(filePath, ".") +
"_updated." + StringUtils.substringAfterLast(filePath, ".");
注意:您仍然需要檢查,如果該文件實際上包含點字符或否則結果將不一致。
我可以看看你的代碼嗎? – SeekingAlpha