我想删除特定字符串之后文件的内容我做了什么我做了一个临时文件并将数据复制到那个和完成后重命名帽子文件。
但是,当我尝试时,我无法重命名文件,也无法删除旧文件。我的代码如下所示,输出令人惊讶,如果它在循环中,如何调用最后一行。
更新
File inputFile = new File(propertiesFilePath+"/"+fileName);
File tempFile = new File(propertiesFilePath+"/tempfile.properties");
BufferedWriter writer=null;
BufferedReader reader =null;
System.out.println("Input file "+inputFile.exists()+" "+tempFile.exists());
try{
reader = new BufferedReader(new FileReader(inputFile));
writer = new BufferedWriter(new FileWriter(tempFile));
String currentLine=null;
while((currentLine = reader.readLine()) != null) {
if(currentLine.contains(KEY_STORE)) break;
System.out.println("Lines "+currentLine);
writer.write(currentLine);
}
}catch(Exception e){
System.out.println("Exception in deleting config");
}finally{
writer.close();
reader.close();
}
System.err.println("Inpute file delete "+inputFile.delete());
return tempFile.renameTo(inputFile);
输出:
Input file true true
Lines # ----------------------------------------------
Inpute file delete false Renamed false
Lines # ---------------------------------------------------
Lines #
Lines # ----------------------------------------------------
Lines #
Lines # --------------------------------------------------------
Lines # ---------------------------------------------------------
Lines # -------------------
Lines #
Lines # ---------------------------------------------------------------------------------
-----------------------
Lines #------------------------------------------------------------------
Lines # ----------------------
Lines -----------------------
Lines
我已经通过(------)重新复制了文本,但是如何在循环完成之前打印出外观的Sysout。
有没有更好的方法来实现我想要的东西。
答案 0 :(得分:1)
问题可能是您在BufferedReader中打开了文件。
File inputFile = new File(propertiesFilePath+"/"+fileName);
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
return tempFile.renameTo(inputFile);
您永远不会关闭reader
。
在重命名/删除文件之前,请尝试添加reader.close()
。
答案 1 :(得分:0)
代码看起来很好,只有我注意到tempFile.renameTo(inputFile)发生了两次,在这两行中:
System.err.println("Inpute file delete "+inputFile.delete()+" Renamed "+tempFile.renameTo(inputFile));
return tempFile.renameTo(inputFile);
我能想到的唯一原因是该进程可能没有执行这些操作的权限,因此重命名和删除都失败了。
请检查权限,希望这有帮助。
干杯!!