как обновить определенные части текстового файла в Java

StackOverflow https://stackoverflow.com/questions/3878372

  •  28-09-2019
  •  | 
  •  

Вопрос

Я хочу иметь возможность обновлять определенную строку в текстовом файле.Но я получаю сообщение об ошибке, что он не может удалить файл, почему я получаю эту ошибку?

public class Main {
    public static void main(String[] args) {
        Main rlf = new Main();
        rlf.removeLineFromFile("F:\\text.txt", "bbb");
    }

    public void removeLineFromFile(String file, String lineToRemove) {
        try {
            File inFile = new File(file);

            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(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().equals(lineToRemove)) {

                    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();
        }
    }
}​
Это было полезно?

Решение

У меня программа работает.Возможно, у вас возникли проблемы с окружающей средой.

Другие советы

Вам следует заглянуть в RandomAccessFile.

Это позволит вам искать нужное место в файле и обновлять только ту часть, которую вы хотите обновить.

Как указал Джастин выше, вам следует использовать API типа RandomAccessFile, если вы хотите изменять части файла.Подход, который вы пытаетесь использовать, имеет много потенциальных проблем.

  • Для этого требуется дополнительно создать файл tmp.Может не масштабироваться для больших файлов (однако я не знаю о вашем проблемном домене)
  • Попытка манипулировать файлами также может вызвать несколько потенциальных исключений и требует большой обработки ошибок.

Вы можете создать новый экземпляр (чтобы закрыть старый) с помощью new затем удалите с его помощью.
Та же проблема с удалением файла здесь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top