Как добавить текст в существующий файл в Java

Макросы расширяются во время компиляции. Закрытия строятся во время выполнения. С помощью макросов вы можете создавать высокоэффективные компиляторы встроенных доменных языков, а с помощью функций высокого порядка вы можете применять неэффективные интерпретаторы. Эти компиляторы eDSL могут выполнять всевозможные статические проверки, выполнять любые дорогостоящие оптимизации, которые вам нравятся, но когда у вас есть только время выполнения, вы ничего не можете сделать дорогостоящим.

И не стоит забывать, что макросы позволяют много более гибкий синтаксис (буквально, любой синтаксис ) для ваших eDSL и языковых расширений.

Подробнее см. ответы на этот вопрос: Коллекция отличных приложений и программ с использованием Макросы

647
задан Jonik 6 November 2009 в 15:50
поделиться

2 ответа

Вы делаете это для регистрации? Если так, то для этого есть несколько библиотек . Двумя наиболее популярными являются Log4j и Logback .

Java 7+

Если вам просто нужно сделать это один раз, класс Files упрощает это:

try {
    Files.write(Paths.get("myfile.txt"), "the text".getBytes(), StandardOpenOption.APPEND);
}catch (IOException e) {
    //exception handling left as an exercise for the reader
}

Осторожно : Вышеупомянутый подход вызовет исключение NoSuchFileException , если файл еще не существует. Он также не добавляет новую строку автоматически (что часто требуется при добавлении в текстовый файл). Ответ Стива Чемберса описывает, как это можно сделать с помощью класса Files .

Однако, если вы будете писать в один и тот же файл много раз, приведенное выше должно открывать и закрывать файл на диске много раз, что является медленной операцией. В этом случае, буферизованный писатель лучше:

try(FileWriter fw = new FileWriter("myfile.txt", true);
    BufferedWriter bw = new BufferedWriter(fw);
    PrintWriter out = new PrintWriter(bw))
{
    out.println("the text");
    //more code
    out.println("more text");
    //more code
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}

Примечания:

  • Второй параметр конструктора FileWriter скажет ему добавить в файл, а не записывать новый файл. (Если файл не существует, он будет создан.)
  • Использование BufferedWriter рекомендуется для дорогостоящего средства записи (например, FileWriter ).
  • Использование PrintWriter дает вам доступ к синтаксису println , к которому вы, вероятно, привыкли, из System.out .
  • Но BufferedWriter и Оболочки PrintWriter не являются строго обязательными.

Старая Java

try {
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("myfile.txt", true)));
    out.println("the text");
    out.close();
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}

Обработка исключений

Если вам нужна надежная обработка исключений для более старой версии Java, она становится очень подробной:

FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter out = null;
try {
    fw = new FileWriter("myfile.txt", true);
    bw = new BufferedWriter(fw);
    out = new PrintWriter(bw);
    out.println("the text");
    out.close();
} catch (IOException e) {
    //exception handling left as an exercise for the reader
}
finally {
    try {
        if(out != null)
            out.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
    try {
        if(bw != null)
            bw.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
    try {
        if(fw != null)
            fw.close();
    } catch (IOException e) {
        //exception handling left as an exercise for the reader
    }
}
771
ответ дан 22 November 2019 в 21:47
поделиться

Вы можете использовать fileWriter с флагом, установленным на true , для добавления.

try
{
    String filename= "MyFile.txt";
    FileWriter fw = new FileWriter(filename,true); //the true will append the new data
    fw.write("add a line\n");//appends the string to the file
    fw.close();
}
catch(IOException ioe)
{
    System.err.println("IOException: " + ioe.getMessage());
}
161
ответ дан 22 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: