Java, как удалить одну строку в файле? - PullRequest
0 голосов
/ 04 октября 2011

Я хочу удалить одну строку записи в файле, используя Java, пример в моем файле,

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

Пусть сказал, что я хочу удалить studentID = BBB ниже код, который я нашел из Google:

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 ]

3 голосов
/ 04 октября 2011

Я только что протестировал эту программу, которая прекрасно работает и дает ожидаемый результат (в Windows). Так что проблема не в коде, это, вероятно, проблема с правами доступа?

Но, как сказано в комментариях, если вы просто предполагаете, что ваша строка будет найдена в вашем файле только как "Student ID", это может (и будет) приводить к ошибкам.

Правильный способ сделать это - прочитать содержимое файла, превратить его в список учеников (класс с идентификатором ученика в качестве поля и другие поля, если хотите), удалить один со студентом Если вы не хотите, затем сохраните файл снова с оставшимся списком, сериализованным в ваш конкретный формат.

1 голос
/ 04 октября 2011

Этот код не имеет проблем, у вас нет разрешения на удаление файла с сервера.Еще одна вещь, измените логику, чтобы найти соответствующую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...