我已多次看过这个问题,但我找不到适用于我的解决方案。我正在尝试将文件重命名为新文件名。我每次都变得虚假,并且不确定为什么像其他大多数人一样有同样的问题。
我的代码如下:
File file = new File("filePath.log");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
for(int i = 1 ; i < 300 ; i++){
bw.write(i);
if(i % 100 == 0){
File newFile = new File("filePath2.log");
if(file.renameTo(newFile)){
System.out.println("true");
} else{
System.out.println("false");
}
file = new File("filePath.log");
bw = new BufferedWriter(new FileWriter(file));
}
}
任何帮助表示赞赏!
编辑:
我能够使用Files.move方法
解决问题bw.close();
String newFilePath ="C:/opt/streamserve/projroot/applications/RFC_SAP_T1/wd/rfcgateway07122014" + move + ".log";
File newFile = new File(newFilePath);
Files.move(file.toPath(), newFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
file = new File("C:/opt/streamserve/projroot/applications/RFC_SAP_T1/wd/rfcgateway.log");
fw = new FileWriter(file);
bw = new BufferedWriter(fw);
move++;
答案 0 :(得分:3)
您需要关闭BufferedWriter。否则,该文件正在使用中,无法重命名(至少在运行Windows的机器上)
答案 1 :(得分:2)
在Windows上,隐式锁定打开的文件。如果你不想要这个功能,不要使用windows(我假设有一个hack你可以做到没有发生这种情况)
问题是您无法重命名已锁定的文件。在Unix下,只有你明确地执行此操作才会锁定文件,在Windows中只需打开它就可以锁定它。
在尝试重命名之前,解决方案始终关闭您的文件,即使在Unix上也是如此。
答案 2 :(得分:0)
好吧,关闭BufferedWriter,您的文件将保存在磁盘上,您可以访问它。
你可以为BufferedWriter获取这个调用close方法:
File file = new File("filePath.log");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
for(int i = 1 ; i < 300 ; i++){
bw.write(i);
if(i % 100 == 0){
File newFile = new File("filePath2.log");
bw.close();
if(file.renameTo(newFile)){
System.out.println("true");
} else{
System.out.println("false");
}
file = new File("filePath.log");
bw = new BufferedWriter(new FileWriter(file));
}
}
答案 3 :(得分:0)
您需要关闭BufferedWriter,否则它将不会写入文件。你的文件将是空的。 请尝试以下方法: -
File file = new File("filePath.log");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
for(int i = 1 ; i < 300 ; i++){
bw.write(i);
if(i % 100 == 0){
bw.close();
File newFile = new File("filePath"+i+".log");
if(file.renameTo(newFile)){
System.out.println("true");
} else{
System.out.println("false");
}
file = new File("filePath.log");
bw = new BufferedWriter(new FileWriter(file));
}
}
bw.close();