我有一個處理文件內容的java應用程序,然後我需要將它移動到另一個位置。java file.renameTo()在unix中失敗
這是我讀文件:
String filePath = new String("foo.bar");
String fileContents = new String("");
char[] myBuffer = new char[chunkSize];
int bytesRead = 0;
BufferedReader in;
try {
FileReader fr = new FileReader(filePath);
in = new BufferedReader(fr);
try {
while ((bytesRead = in.read(myBuffer,0,chunkSize)) != -1)
{
//System.out.println("Read " + bytesRead + " bytes. They were: " + new String(myBuffer));
fileContents+= new String(myBuffer).substring(0, bytesRead);
}
// close the stream as I don't need it anymore. (If I don't close it, then java would hold the file open thus preventing the subsequent move of the file)
in.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
return null;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
該文件爲我關閉這兩個輸入流和文件閱讀器應該關閉。
然後在此之後我嘗試將文件移動到使用File.renameTo(newFileName);
另一個目錄,但失敗(在UNIX下!在Windows下正常工作)
權的舉動失敗後,我考我是否可以創建一個文件叫做newFileName
以及我是否可以刪除原始文件。新文件將被創建,而原始文件無法刪除。 有趣的是,我可以在應用程序運行時(在失敗之後)從命令行中刪除原始文件。
任何想法爲什麼是這個或任何其他選擇?
更多細節:我在unix下工作,爲了遺留原因我必須使用java 1.6(因此我無法恢復到從java 1.7開始支持的Files.move())。
你是否將它移動到不同的文件系統/ NFS? – dogbane 2013-04-09 15:59:05
您是否檢查過由您的代碼創建的文件的屬性,可能是JVM沒有權限訪問該文件,或者您的應用程序代碼是作爲沒有讀/寫訪問權限的別名運行? – 2013-04-09 16:00:04
@dogbane不,我實際上將其移動到創建原始文件的文件夾的子文件夾中(子文件夾存在)。 – 2013-04-09 16:02:01