删除java中的文本文件

删除java中的文本文件,java,Java,我有一种方法可以删除文本文件中包含选定电话号码的行。下面是我的代码 private void DeleteButtonActionPerformed(java.awt.event.ActionEvent evt) { try { String selectedphone = Phone.getText(); BufferedReader br = new Buff

我有一种方法可以删除文本文件中包含选定电话号码的行。下面是我的代码

private void DeleteButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             

    try {
        String selectedphone = Phone.getText();

        BufferedReader br = new BufferedReader(new FileReader(file));

        // Construct the new file that will later be renamed to the original file
        PrintWriter pw = new PrintWriter(new FileWriter(tempFile));

        String line = null;
        // Read from the original file and write to the new
        // unless content matches data to be removed.
        while ((line = br.readLine()) != null) {
            if (line.trim().startsWith(selectedphone)) {
                continue;
            } else {
                pw.println(line);
                pw.flush();

            }
        }
        pw.close();
        br.close();

        file.delete();
        if (!file.delete()) {
            System.out.println("Could not delete file");
        }

        //rename tempphonebook.txt file back to phonebook.txt
        tempFile.renameTo(file);
        if (tempFile.renameTo(file)) {
            System.out.println("Update succesful");
        } else {
            System.out.println("Update failed");
        }
    } catch (Exception e) {
    }

}
我的“phonebook.txt”文件如下

0787465147|John|Doe|924578654v|Colombo|
0715435786|Jane|Doe|6672475845v|Colombo|
0114745755|Foo|Baz|6454753754v|Kandy|
当我点击'delete'按钮,并将'selectedphone'设置为0787465147时,它将创建一个'tempphonebook.txt'文件,如下所示

0715435786|Jane|Doe|6672475845v|Colombo|
0114745755|Foo|Baz|6454753754v|Kandy|
然后应删除“phonebook.txt”,并将“temphonebook.txt”重命名为“phonebook.txt”。问题是我无法删除“phonebook.txt”文件。当我点击“删除”按钮时,我得到了这个按摩

Could not delete file
Update failed

有人能帮我吗?提前感谢!:)

您尝试删除文件两次:

    file.delete();
    if (!file.delete()) {

删除第一个
文件。删除()

您的代码尝试删除该文件两次。因此,如果文件在第一次尝试时被删除,您的第二次调用将无效。您需要删除第一个

//file.delete(); //not required
if (!file.delete()) {

使用try with资源。这在大多数情况下都有效

是,删除用于删除和重命名文件的额外代码

您只需要使用fileName.delete()或fileName.renameTo(“name”); 一旦如果命令成功,它将返回true

当您再次使用该命令时,它将尝试删除不存在的文件(您已经删除了该文件)

参见此示例


它处理类似的问题。

您确定没有删除该文件吗?您的代码实际上尝试了两次删除该文件;因此,第二次尝试肯定会失败,要么是因为文件第一次被删除,要么是因为有什么东西阻止了它被删除。您需要删除对
file.delete()
的一个调用。我检查了文件夹,文件仍然在那里。还删除了第一个“file.delete()”。仍然在做同样的按摩。我开始觉得有什么东西阻止了文件被删除。你在Windows中运行这个吗?根据我的经验,Windows有时会在关闭正在读取的
读取器后将文件锁定几毫秒;因此,您将无法在
br.close()
之后立即删除它。也许您可以在删除之前插入20毫秒左右的睡眠时间。您从
file.canWrite()
中得到了什么?是的,我使用的是Windows 7。我是java新手。您能解释一下我是如何做到这一点的吗?@TharinduKuruppu:-检查该文件是否未打开,以及您是否有删除该文件的权限。@TharinduKuruppu:-还检查是否有其他进程正在访问该文件?看起来某个进程或任务正在阻止删除该文件。否,在我运行该程序时,两个文件都已关闭。我可以手动删除这些文件,但我不确定如何检查我是否有权通过该程序删除该文件。@TharinduKuruppu:-您是否使用管理访问权限运行该程序?当然。我刚刚尝试用IOrbit unlocker解锁文件“honebook.txt”。在我执行程序之前,它没有被锁定。但当程序运行时,文件被锁定。所以我在点击删除按钮之前解锁了它,结果成功了。现在的问题是,在我关闭该文件后,如何锁定它,以及如何修复此问题?