Как обновить определенные части текстового файла в Java - PullRequest
1 голос
/ 07 октября 2010

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

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

Ответы [ 4 ]

2 голосов
/ 07 октября 2010

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

2 голосов
/ 07 октября 2010

Вы должны посмотреть на RandomAccessFile.

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

0 голосов
/ 07 октября 2010

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

0 голосов
/ 07 октября 2010

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

  • Требуется дополнительно создать файл tmp.Может не масштабироваться для больших файлов (хотя я не знаю о вашей проблемной области)
...