2014-01-28 45 views
1

我似乎無法找到在Java中的「。」擴展名之前連接到文件名的方法,我不完全確定我會如何去做這件事。在Java中的'。'文件名擴展之前連接到一個文件名

我已經嘗試:

String s = r + "V1"; 

其中變量r包含myFile.txt值和輸出是:myFile.txtV1,但我需要實現的是myFileV1.txt,因爲我不希望覆蓋現有文件具有相同的名稱,但在文件寫入時連接.文件擴展名前的V1

感謝

+0

我可以看看你的代碼嗎? – SeekingAlpha

回答

4

如果文件名可以包含多於一個點,則應該找到lastIndexOf點。然後,您可以從文件名的開頭到最後一個點創建子字符串,附加其他文本,並追加最後一個點的子字符串。

這應該做的伎倆:基於StringUtils.substringBeforeLast()StringUtils.substringAfterLast

int lastDot = r.lastIndexOf('.'); 
String s = r.substring(0,lastDot) + "V1" + r.substring(lastDot); 
+0

感謝Pshemo,簡潔明瞭的代碼和解釋。 – Simon

1

試試這個(假設你只有一個'.'在您的文件的名稱):

String[] x = r.split("\\."); 
String s = x[0]+"V1."+x[1]; 
0
String s = r.substring(0,r.indexOf(".")) + "V1" + r.substring(a.indexOf(".")); 

提醒擴展是技術上特定的平臺。另外,您可能希望爲名稱和擴展名分別設置變量,並在最後將它們組合在一起。最後需要注意的是,如果文件名中有多個句點符號(例如hello.world.txt),此代碼將不起作用

1

另一種方法是使用Apache Commons IOFilenameUtils類來獲取文件的基本名稱和擴展名。

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; 
+0

這裏只有gotcha是如果你的文件名缺少擴展名,那麼你添加了一個尾隨點「。」。這很可能是不希望的。 –

0

apache commons方法:

String newPath = StringUtils.substringBeforeLast(filePath, ".") + 
    "_updated." + StringUtils.substringAfterLast(filePath, "."); 

注意:您仍然需要檢查,如果該文件實際上包含點字符或否則結果將不一致。