我有一个处理文件内容的 java 应用程序,然后我需要将它移动到另一个位置。
这就是我读取文件的方式:
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())。