关闭txt文件并删除它。
关闭txt文件并删除它。
我在这个函数的最后两行代码中遇到了问题,因为文件file.txt
仍然是打开状态且未被删除,tmpFile.txt
的名称也没有改变。\n从file.txt
复制到tmpFile.txt
工作得很好。\n我请求帮助。\n
public static void transfer(Client client) throws FileNotFoundException, IOException{ File file = new File("file.txt"); File tmpFile = new File("tmpFile.txt"); BufferedReader reader = new BufferedReader(new FileReader(file)); BufferedWriter writer = new BufferedWriter(new FileWriter(tmpFile)); try{ String lineToRemove = client.id + ";" + client.pin + ";" + client.money + ";" + client.name + ";"; String currentLine; while((currentLine = reader.readLine()) != null) { String trimmedLine = currentLine.trim(); if(trimmedLine.equals(lineToRemove)) continue; writer.write(currentLine + "\n"); } } finally{ writer.close(); reader.close(); } file.delete(); tmpFile.renameTo(file); /*File oldFile = new File("tmpFile.txt"); File newFile = new File(oldFile.getParent(), "file.txt"); Files.move(oldFile.toPath(), newFile.toPath());*/ }
问题出现的原因是无法关闭和删除txt文件。解决方法是使用新的NIO.2方法来升级代码。
在代码中,使用了NIO.2的新方法来替代原来的方法。首先,定义了文件的路径和临时文件的路径。然后,使用Files类的newBufferedReader方法来创建一个读取文件的BufferedReader对象,使用Files类的newBufferedWriter方法来创建一个写入临时文件的BufferedWriter对象。
接下来,定义了要删除的行的内容,即client对象的id、pin、money和name的组合。然后,使用循环读取文件的每一行,如果当前行不等于要删除的行,就将该行写入临时文件中。
最后,使用Files类的move方法将临时文件移动到原文件的位置,并指定使用StandardCopyOption.REPLACE_EXISTING选项来替换现有的文件。
通过以上的代码更新,可以解决无法关闭和删除txt文件的问题。
问题出现的原因是代码中使用了文件重命名的操作,导致文件被重命名后无法关闭和删除。
解决方法是在文件重命名之前先关闭文件,然后再进行文件删除和重命名的操作。
具体解决方法如下:
public static void main(String[] args) throws Exception { File file = new File("src/file.txt"); File tmpFile = new File("src/tmpFile.txt"); BufferedReader reader = new BufferedReader(new FileReader(file)); BufferedWriter writer = new BufferedWriter(new FileWriter(tmpFile)); try{ writer.write("HALLO" + "\n"); } finally { writer.close(); reader.close(); } reader.close(); // 关闭文件 writer.close(); // 关闭文件 file.delete(); tmpFile.renameTo(file); }
以上代码将文件关闭操作放在文件删除和重命名操作之前,确保文件关闭后再进行后续操作,以解决文件无法关闭和删除的问题。