关闭txt文件并删除它。

33 浏览
0 Comments

关闭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());*/
}

0
0 Comments

问题出现的原因是无法关闭和删除txt文件。解决方法是使用新的NIO.2方法来升级代码。

在代码中,使用了NIO.2的新方法来替代原来的方法。首先,定义了文件的路径和临时文件的路径。然后,使用Files类的newBufferedReader方法来创建一个读取文件的BufferedReader对象,使用Files类的newBufferedWriter方法来创建一个写入临时文件的BufferedWriter对象。

接下来,定义了要删除的行的内容,即client对象的id、pin、money和name的组合。然后,使用循环读取文件的每一行,如果当前行不等于要删除的行,就将该行写入临时文件中。

最后,使用Files类的move方法将临时文件移动到原文件的位置,并指定使用StandardCopyOption.REPLACE_EXISTING选项来替换现有的文件。

通过以上的代码更新,可以解决无法关闭和删除txt文件的问题。

0
0 Comments

问题出现的原因是代码中使用了文件重命名的操作,导致文件被重命名后无法关闭和删除。

解决方法是在文件重命名之前先关闭文件,然后再进行文件删除和重命名的操作。

具体解决方法如下:

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);
}

以上代码将文件关闭操作放在文件删除和重命名操作之前,确保文件关闭后再进行后续操作,以解决文件无法关闭和删除的问题。

0