[英]Java file character encoding move/rename in Linux
我有這個重命名文件(或目錄)的java代碼。 當我使用一些特殊字符時Linux上存在問題,它在Windows上使用這些特殊字符。 我嘗試它的方式是這樣的:在Windows中
我創造了一個名為“326½_6”的騙子
我構建了一個jar文件,並直接在windows cmd(或linux shell)中調用它(java -jar),第一個param是上面的目錄,第二個param是一個新目錄的路徑。 這有效
然后,我使用SFTP(WinSCP)將目錄傳輸到Linux服務器。 我重復上面的步驟,但它不起作用。 我得到這個輸出:
移動/ home / user / testarea /326�_6/到/ home / user / testarea / test5 /
---無法重命名-------
反正有沒有在Linux機器上工作?
編碼:
public static void main(String [] args) {
String source = args[0];
String dest = args[1];
System.out.println(" - Moving " + source + " to " + dest);
File sourceFile = new File(source);
File destinationFile = new File(dest);
if (!sourceFile.renameTo(destinationFile)) {
System.out.println("--- could not perform rename -------");
}
System.out.println("Finished moving");
}
謝謝!
看起來Linux上的Java期望文件和目錄名稱以UTF-8編碼,但是當WinSCP創建目錄時,它在latin1或類似名稱中編碼名稱,並且新名稱在UTF-8中無效。 顯然這是WinSCP的默認行為, 較新的版本默認使用UTF-8 。
一種簡單的解決方案,使Java使用與創建目錄時SFTP使用的編碼相同的編碼。 這是通過在運行JVM時更改語言環境來完成的:
LANG=en_US.iso8859_1 java -jar YourProgram.jar
但是,必須存在區域設置en_US.iso8859_1才能使其正常工作。 您可以從分發的軟件包存儲庫中安裝新的區域設置。 如果沒有,您可以在我的博客中閱讀有關如何使用特定編碼 (以及一般的此文件名問題) 定義區域設置的信息 。
可能是文件源不存在。 在重命名之前檢查是否存在
renameTo()根本不可靠,尤其是在windows中,但也在unix類系統中。 我建議的是執行一些檢查,創建一些“重試”機制並查看這篇文章 。 你能指定你使用的編碼(通過查看我認為UTF-8的標簽)以及如何啟動你的程序?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.