Java如何删除文件中的一行?

时间:2011-10-04 12:51:51

标签: java file

我想在使用Java的文件中删除一行记录,例如在我的文件中

studentID  studentName studentAddress studentPhoneNo
AAA|AAA AAA | AAAAAAAAAAA | AAAAAAAAAAAA
BBB|BBB BBB | BBBBBBBBBBB | BBBBBBBBBBBB
CCC|CCC CCC | CCCCCCCCCCC | CCCCCCCCCCCC

我想要删除studentID = BBB以下是我从谷歌找到的代码:

try {

        File inFile = new File(studentFile);

        if (!inFile.isFile()) {
            System.out.println("Parameter is not an existing file");
            return;
        }

        // Construct the new file that will later be renamed to the original
        // filename.
        File tempFile = new File(inFile.getAbsolutePath() + ".tmp");

        BufferedReader br = new BufferedReader(new FileReader(studentFile));
        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().contains(id)) {

                pw.println(line);
                pw.flush();
            }
        }
        pw.close();
        br.close();

        // Delete the original file
        if (!inFile.delete()) {
            System.out.println("Could not delete file");
            return;
        }

        // Rename the new file to the filename the original file had.
        if (!tempFile.renameTo(inFile))
            System.out.println("Could not rename file");

    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }

但我收到此错误无法删除文件。

2 个答案:

答案 0 :(得分:3)

我刚测试了这个程序,它运行得非常好并且产生了预期的结果(在Windows上)。 所以问题不在于代码,它可能是一个权限问题?

但正如评论中所述,如果你只是假设你的字符串只能作为你文件中的“学生ID”找到,那就可以(并且会)导致错误。

正确的方法是阅读文件的内容,将其转换为学生列表(学生ID为字段的课程,以及其他字段,如果您需要),删除与学生的一个您不想要的ID,然后再次保存文件,其余列表序列化为您的特定格式。

答案 1 :(得分:1)

此代码没有问题,您无权从服务器删除该文件。还有一件事是,更改逻辑以找到匹配的行。