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

683

Мне нужно добавить текст повторно в существующий файл в Java. Как я могу это сделать?

flyingfromchina
источник

Ответы:

793

Вы делаете это для целей регистрации? Если так, то для этого есть несколько библиотек . Двумя самыми популярными являются 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
}

Осторожно : вышеприведенный подход выдает a, 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обертки не являются строго необходимыми.

Старая Ява

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
    }
}
койка
источник
31
Вы должны либо использовать java7 try-with-resources, либо поместить close () в блок finally, чтобы убедиться, что файл закрыт в случае исключения
Светлин Зарев
1
обновлен синтаксисом Java 7. Обработка исключений все еще остается для читателя как упражнение, но делает комментарий более понятным.
Кип
3
Давайте представим, что new BufferedWriter(...)это исключение; Будет FileWriterли закрыто? Я предполагаю, что он не будет закрыт, потому что close()метод (в нормальных условиях) будет вызываться для outобъекта, который в этом случае не будет инициализирован - так что на самом деле close()метод не будет вызываться -> файл будет открыт, но не будет закрыт. Так что ИМХО tryутверждение должно выглядеть так try(FileWriter fw = new FileWriter("myFile.txt")){ Print writer = new ....//code goes here } И он должен flush()писателю перед выходом из tryблока !!!
Светлин Зарев
5
Внимание: пример «Старая Java» не будет корректно закрывать поток, если исключение выдается внутри блока try.
Эмили Л.
1
Несколько возможных «ошибок» с помощью метода Java 7: (1) Если файл еще не существует, StandardOpenOption.APPENDон не будет создан - что-то вроде тихого сбоя, поскольку он также не вызовет исключения. (2) Использование .getBytes()будет означать, что до или после добавленного текста нет возвращаемого символа. Добавили альтернативный ответ для решения этих.
Стив Чемберс
166

Вы можете использовать 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());
}
Северный полюс
источник
9
closeдолжен быть помещен в finallyблок, как показано в ответе @ etech, на случай, если между созданием FileWriter и вызовом close возникнет исключение.
Пшемо
5
Хороший ответ, хотя лучше использовать System.getProperty ("line.separator") для новой строки, а не "\ n".
Генри Чжу
@ Декодировано Я откатил ваш ответ на этот ответ, так как он не компилируется.
Кип
@Kip, в чем была проблема? Я должен был ввести "опечатку".
Декодировано
2
Как насчет использования ресурсов? try(FileWriter fw = new FileWriter(filename,true)){ // Whatever }catch(IOException ex){ ex.printStackTrace(); }
php_coder_3809625
72

Разве все ответы здесь с блоками try / catch не должны содержать фрагменты .close (), содержащиеся в блоке finally?

Пример для помеченного ответа:

PrintWriter out = null;
try {
    out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)));
    out.println("the text");
} catch (IOException e) {
    System.err.println(e);
} finally {
    if (out != null) {
        out.close();
    }
} 

Также, начиная с Java 7, вы можете использовать оператор try-with-resources . Блок finally не требуется для закрытия объявленных ресурсов, поскольку он обрабатывается автоматически и также менее подробен:

try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) {
    out.println("the text");
} catch (IOException e) {
    System.err.println(e);
}
Etech
источник
1
Когда outвыходит из области видимости, он автоматически закрывается при сборке мусора, верно? В вашем примере с finallyблоком, я думаю, что вам действительно нужна еще одна вложенная попытка / ловить, out.close()если я правильно помню. Решение Java 7 довольно изящно! (Я не занимался разработкой Java с Java 6, поэтому я не был знаком с этим изменением.)
Kip
1
@Kip Нет, выход из области видимости ничего не делает в Java. Файл будет закрыт в случайное время в будущем. (вероятно, когда программа закрывается)
Navin
@etech Будет ли нужен второй подход flush?
сифантид
43

Редактировать - как в Apache Commons 2.1, правильный способ сделать это:

FileUtils.writeStringToFile(file, "String to append", true);

Я адаптировал решение @ Kip для включения правильного закрытия файла наконец:

public static void appendToFile(String targetFile, String s) throws IOException {
    appendToFile(new File(targetFile), s);
}

public static void appendToFile(File targetFile, String s) throws IOException {
    PrintWriter out = null;
    try {
        out = new PrintWriter(new BufferedWriter(new FileWriter(targetFile, true)));
        out.println(s);
    } finally {
        if (out != null) {
            out.close();
        }
    }
}

ripper234
источник
5
О, спасибо. Я был удивлен сложностью всех других ответов. Я действительно не понимаю, почему людям нравится усложнять свою жизнь (разработчика).
Alphaaa
Проблема этого подхода заключается в том, что он открывает и закрывает выходной поток каждый раз. В зависимости от того, что и как часто вы пишете в свой файл, это может привести к смешным накладным расходам.
Буффало
@ Буффало прав. Но вы всегда можете использовать StringBuilder для создания больших кусков (которые стоит написать) перед записью их в файл.
Константин К
32

Чтобы немного расширить ответ Кипа , вот простой метод Java 7+, позволяющий добавить новую строку в файл, создав его, если он еще не существует :

try {
    final Path path = Paths.get("path/to/filename.txt");
    Files.write(path, Arrays.asList("New line to append"), StandardCharsets.UTF_8,
        Files.exists(path) ? StandardOpenOption.APPEND : StandardOpenOption.CREATE);
} catch (final IOException ioe) {
    // Add your own exception handling...
}

Примечание . Выше используется Files.writeперегрузка, которая записывает строки текста в файл (т. Е. Аналогична printlnкоманде). Чтобы просто записать текст до конца (то есть аналогично printкоманде), Files.writeможно использовать альтернативную перегрузку, передавая байтовый массив (например "mytext".getBytes(StandardCharsets.UTF_8)).

Стив Чемберс
источник
Вам нужно проверить, существует ли файл? Я думал, что .CREATEделает работу за вас.
LearningToJava
22

Убедитесь, что поток правильно закрыт во всех сценариях.

Немного тревожит то, что многие из этих ответов оставляют дескриптор файла открытым в случае ошибки. Ответ https://stackoverflow.com/a/15053443/2498188 на деньги, но только потому, что BufferedWriter()не может бросить. Если это возможно, то исключение оставит FileWriterобъект открытым.

Более общий способ сделать это, который не волнует, BufferedWriter()может ли бросить:

  PrintWriter out = null;
  BufferedWriter bw = null;
  FileWriter fw = null;
  try{
     fw = new FileWriter("outfilename", true);
     bw = new BufferedWriter(fw);
     out = new PrintWriter(bw);
     out.println("the text");
  }
  catch( IOException e ){
     // File writing/opening failed at some stage.
  }
  finally{
     try{
        if( out != null ){
           out.close(); // Will close bw and fw too
        }
        else if( bw != null ){
           bw.close(); // Will close fw too
        }
        else if( fw != null ){
           fw.close();
        }
        else{
           // Oh boy did it fail hard! :3
        }
     }
     catch( IOException e ){
        // Closing the file writers failed for some obscure reason
     }
  }

Редактировать:

Начиная с Java 7, рекомендуемый способ - использовать «try with resources» и позволить JVM справиться с этим:

  try(    FileWriter fw = new FileWriter("outfilename", true);
          BufferedWriter bw = new BufferedWriter(fw);
          PrintWriter out = new PrintWriter(bw)){
     out.println("the text");
  }  
  catch( IOException e ){
      // File writing/opening failed at some stage.
  }
Эмили Л.
источник
+1 для правильного ARM с Java 7. Вот хороший вопрос об этой хитрой теме: stackoverflow.com/questions/12552863/… .
Вадим
1
Хм, почему-то PrintWriter.close()не заявлено, как throws IOExceptionв документах . Глядя на его источник , close()метод, действительно, не может выдать IOException, потому что он перехватывает его из нижележащего потока и устанавливает флаг. Поэтому, если вы работаете над кодом для следующего космического челнока или системы дозирования рентгеновских лучей, вы должны использовать ее PrintWriter.checkError()после попытки out.close(). Это действительно должно быть задокументировано.
Евгений Сергеев
Если мы собираемся быть супер параноиком по поводу закрытия, каждый из них XX.close()должен быть в своем собственном try / catch, верно? Например, out.close()может выбросить исключение, в этом случае bw.close()и fw.close()никогда бы не дозвонились, и fwэто тот , который является наиболее важным для закрытия.
Кип
13

В Java-7 это также можно сделать таким:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

// ---------------------

Path filePath = Paths.get("someFile.txt");
if (!Files.exists(filePath)) {
    Files.createFile(filePath);
}
Files.write(filePath, "Text to be added".getBytes(), StandardOpenOption.APPEND);
Цолак Барсегян
источник
2
Какой импорт требуется? Какую библиотеку используют эти вещи?
Четан Бхасин
9

Java 7+

По моему скромному мнению, так как я фанат простой Java, я хотел бы предложить что-то, что это комбинация вышеупомянутых ответов. Может быть, я опаздываю на вечеринку. Вот код:

 String sampleText = "test" +  System.getProperty("line.separator");
 Files.write(Paths.get(filePath), sampleText.getBytes(StandardCharsets.UTF_8), 
 StandardOpenOption.CREATE, StandardOpenOption.APPEND);

Если файл не существует, он создает его, и если он уже существует, он добавляет sampleText к существующему файлу. Использование этого избавит вас от добавления ненужных библиотек в ваш путь к классам.

Лефтерис Баб
источник
8

Это можно сделать в одной строке кода. Надеюсь это поможет :)

Files.write(Paths.get(fileName), msg.getBytes(), StandardOpenOption.APPEND);
Флинтофф
источник
1
его может быть недостаточно :) лучшей версией является Files.write (Paths.get (fileName), msg.getBytes (), StandardOpenOption.APPEND, StandardOpenOption.CREATE);
evg345
6

Использование java.nio. Файлы вместе с java.nio.file. StandardOpenOption

    PrintWriter out = null;
    BufferedWriter bufWriter;

    try{
        bufWriter =
            Files.newBufferedWriter(
                Paths.get("log.txt"),
                Charset.forName("UTF8"),
                StandardOpenOption.WRITE, 
                StandardOpenOption.APPEND,
                StandardOpenOption.CREATE);
        out = new PrintWriter(bufWriter, true);
    }catch(IOException e){
        //Oh, no! Failed to create PrintWriter
    }

    //After successful creation of PrintWriter
    out.println("Text to be appended");

    //After done writing, remember to close!
    out.close();

Это создает BufferedWriterиспользование файлов, которое принимает StandardOpenOptionпараметры, и автоматическую очистку PrintWriterот результирующего BufferedWriter. PrintWriter«S println()метод, то можно назвать для записи в файл.

В StandardOpenOptionпараметры , используемые в этом коде: открывает файл для записи, только добавляет к файлу, и создает файл , если он не существует.

Paths.get("path here")можно заменить на new File("path here").toPath(). И Charset.forName("charset name")может быть изменен для размещения желаемого Charset.

icasdri
источник
5

Я просто добавляю небольшую деталь:

    new FileWriter("outfilename", true)

2.nd параметр (true) - это функция (или интерфейс), называемая добавляемой ( http://docs.oracle.com/javase/7/docs/api/java/lang/Appendable.html ). Он отвечает за возможность добавлять некоторый контент в конец определенного файла / потока. Этот интерфейс реализован начиная с Java 1.5. Каждый объект (т. Е. BufferedWriter, CharArrayWriter, CharBuffer, FileWriter, FilterWriter, LogStream, OutputStreamWriter, PipedWriter, PrintStream, PrintWriter, StringBuffer, StringBuilder, StringWriter, Writer ) с этим интерфейсом можно использовать для добавления содержимого

Другими словами, вы можете добавить некоторый контент в ваш gzipped файл или какой-то http процесс

xhudik
источник
4

Пример с использованием гуавы:

File to = new File("C:/test/test.csv");

for (int i = 0; i < 42; i++) {
    CharSequence from = "some string" + i + "\n";
    Files.append(from, to, Charsets.UTF_8);
}
dantuch
источник
13
Это ужасный совет. Вы открываете поток в файл 42 раза, а не один раз.
xehpuk
3
@ xehpuk хорошо, это зависит. 42 все еще в порядке, если это делает код намного более читабельным. 42к не будет приемлемым.
Дануч
4

Попробуйте с bufferFileWriter.append, он работает со мной.

FileWriter fileWriter;
try {
    fileWriter = new FileWriter(file,true);
    BufferedWriter bufferFileWriter = new BufferedWriter(fileWriter);
    bufferFileWriter.append(obj.toJSONString());
    bufferFileWriter.newLine();
    bufferFileWriter.close();
} catch (IOException ex) {
    Logger.getLogger(JsonTest.class.getName()).log(Level.SEVERE, null, ex);
}
Надхир Титауин
источник
что такое obj.toJSONString () здесь?
Бхаскара Арани
@BhaskaraArani Это просто строка, он привел пример объекта JSON, преобразованного в строку, но идея в том, что это может быть любая строка.
Герби Хичем,
3
    String str;
    String path = "C:/Users/...the path..../iin.txt"; // you can input also..i created this way :P

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    PrintWriter pw = new PrintWriter(new FileWriter(path, true));

    try 
    {
       while(true)
        {
            System.out.println("Enter the text : ");
            str = br.readLine();
            if(str.equalsIgnoreCase("exit"))
                break;
            else
                pw.println(str);
        }
    } 
    catch (Exception e) 
    {
        //oh noes!
    }
    finally
    {
        pw.close();         
    }

это будет делать то, что вы собираетесь ..

Бенджамин Варгезе
источник
3

Лучше использовать try-with-resources, чем все, что было до Java 7, наконец, бизнес

static void appendStringToFile(Path file, String s) throws IOException  {
    try (BufferedWriter out = Files.newBufferedWriter(file, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
        out.append(s);
        out.newLine();
    }
}
mikeyreilly
источник
3

Если мы используем Java 7 и выше, а также знаем, какое содержимое нужно добавить (добавить) в файл, мы можем использовать метод newBufferedWriter в пакете NIO.

public static void main(String[] args) {
    Path FILE_PATH = Paths.get("C:/temp", "temp.txt");
    String text = "\n Welcome to Java 8";

    //Writing to the file temp.txt
    try (BufferedWriter writer = Files.newBufferedWriter(FILE_PATH, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {
        writer.write(text);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Есть несколько моментов, на которые стоит обратить внимание:

  1. Всегда полезно задавать кодировку кодировки, и для этого у нас есть константа в классе StandardCharsets.
  2. Код использует try-with-resourceоператор, в котором ресурсы автоматически закрываются после попытки.

Хотя OP не спрашивал, но на всякий случай мы хотим искать строки, имеющие какое-то конкретное ключевое слово, например, confidentialмы можем использовать потоковые API в Java:

//Reading from the file the first line which contains word "confidential"
try {
    Stream<String> lines = Files.lines(FILE_PATH);
    Optional<String> containsJava = lines.filter(l->l.contains("confidential")).findFirst();
    if(containsJava.isPresent()){
        System.out.println(containsJava.get());
    }
} catch (IOException e) {
    e.printStackTrace();
}
akhil_mittal
источник
предостережение: при использовании BufferedWriter, write(String string)если newLine()нужно ожидать новую строку после каждой записанной строки, следует вызывать
yongtw123
3
FileOutputStream fos = new FileOutputStream("File_Name", true);
fos.write(data);

Значение true позволяет добавлять данные в существующий файл. Если мы напишем

FileOutputStream fos = new FileOutputStream("File_Name");

Это перезапишет существующий файл. Так что иди на первый подход.

Шакти Кумар
источник
3
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Writer {


    public static void main(String args[]){
        doWrite("output.txt","Content to be appended to file");
    }

    public static void doWrite(String filePath,String contentToBeAppended){

       try(
            FileWriter fw = new FileWriter(filePath, true);
            BufferedWriter bw = new BufferedWriter(fw);
            PrintWriter out = new PrintWriter(bw)
          )
          {
            out.println(contentToBeAppended);
          }  
        catch( IOException e ){
        // File writing/opening failed at some stage.
        }

    }

}
Дэвид Чарльз
источник
Выше приведен лишь краткий пример реализации решения, представленного по этой ссылке . Таким образом, вы можете скопировать и запустить код и сразу увидеть, как он работает, убедитесь, что файл output.out находится в том же каталоге, что и файл Writer.java
Дэвид Чарльз
2
FileOutputStream stream = new FileOutputStream(path, true);
try {

    stream.write(

        string.getBytes("UTF-8") // Choose your encoding.

    );

} finally {
    stream.close();
}

Тогда поймайте IOException где-нибудь вверх по течению.

SharkAlley
источник
2

Создайте функцию в любом месте вашего проекта и просто вызывайте эту функцию там, где вам это нужно.

Ребята, вы должны помнить, что вы, ребята, вызываете активные потоки, которые вы не вызываете асинхронно, и, вероятно, было бы неплохо от 5 до 10 страниц, чтобы сделать это правильно. Почему бы не тратить больше времени на свой проект и забыть написать что-нибудь уже написанное. Должным образом

    //Adding a static modifier would make this accessible anywhere in your app

    public Logger getLogger()
    {
       return java.util.logging.Logger.getLogger("MyLogFileName");
    }
    //call the method anywhere and append what you want to log 
    //Logger class will take care of putting timestamps for you
    //plus the are ansychronously done so more of the 
    //processing power will go into your application

    //from inside a function body in the same class ...{...

    getLogger().log(Level.INFO,"the text you want to append");

    ...}...
    /*********log file resides in server root log files********/

три строки кода две действительно, так как третья фактически добавляет текст. :П

Netcfmx
источник
2

Библиотека

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

Код

public void append()
{
    try
    {
        String path = "D:/sample.txt";

        File file = new File(path);

        FileWriter fileWriter = new FileWriter(file,true);

        BufferedWriter bufferFileWriter  = new BufferedWriter(fileWriter);

        fileWriter.append("Sample text in the file to append");

        bufferFileWriter.close();

        System.out.println("User Registration Completed");

    }catch(Exception ex)
    {
        System.out.println(ex);
    }
}
absiddiqueLive
источник
2

Вы также можете попробовать это:

JFileChooser c= new JFileChooser();
c.showOpenDialog(c);
File write_file = c.getSelectedFile();
String Content = "Writing into file"; //what u would like to append to the file



try 
{
    RandomAccessFile raf = new RandomAccessFile(write_file, "rw");
    long length = raf.length();
    //System.out.println(length);
    raf.setLength(length + 1); //+ (integer value) for spacing
    raf.seek(raf.length());
    raf.writeBytes(Content);
    raf.close();
} 
catch (Exception e) {
    //any exception handling method of ur choice
}
aashima
источник
1

Я мог бы предложить проект Apache Commons . Этот проект уже предоставляет основу для того, что вам нужно (например, гибкая фильтрация коллекций).

Том Дрейк
источник
1

Следующий метод позволяет вам добавить текст в некоторый файл:

private void appendToFile(String filePath, String text)
{
    PrintWriter fileWriter = null;

    try
    {
        fileWriter = new PrintWriter(new BufferedWriter(new FileWriter(
                filePath, true)));

        fileWriter.println(text);
    } catch (IOException ioException)
    {
        ioException.printStackTrace();
    } finally
    {
        if (fileWriter != null)
        {
            fileWriter.close();
        }
    }
}

Альтернативно используя FileUtils:

public static void appendToFile(String filePath, String text) throws IOException
{
    File file = new File(filePath);

    if(!file.exists())
    {
        file.createNewFile();
    }

    String fileContents = FileUtils.readFileToString(file);

    if(file.length() != 0)
    {
        fileContents = fileContents.concat(System.lineSeparator());
    }

    fileContents = fileContents.concat(text);

    FileUtils.writeStringToFile(file, fileContents);
}

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

BullyWiiPlaza
источник
1

Этот код удовлетворит ваши потребности:

   FileWriter fw=new FileWriter("C:\\file.json",true);
   fw.write("ssssss");
   fw.close();
Шалини Баранвал
источник
ммм ... что ?? Это перезапишет файл.
Джавадба
docs.oracle.com/javase/7/docs/api/java/io/…
Мартин Всетика,
1

Если вы хотите добавить НЕКОТОРЫЙ ТЕКСТ В КОНКРЕТНЫЕ ЛИНИИ, вы можете сначала прочитать весь файл, добавить текст куда угодно, а затем переписать все, как показано в коде ниже:

public static void addDatatoFile(String data1, String data2){


    String fullPath = "/home/user/dir/file.csv";

    File dir = new File(fullPath);
    List<String> l = new LinkedList<String>();

    try (BufferedReader br = new BufferedReader(new FileReader(dir))) {
        String line;
        int count = 0;

        while ((line = br.readLine()) != null) {
            if(count == 1){
                //add data at the end of second line                    
                line += data1;
            }else if(count == 2){
                //add other data at the end of third line
                line += data2;
            }
            l.add(line);
            count++;
        }
        br.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }       
    createFileFromList(l, dir);
}

public static void createFileFromList(List<String> list, File f){

    PrintWriter writer;
    try {
        writer = new PrintWriter(f, "UTF-8");
        for (String d : list) {
            writer.println(d.toString());
        }
        writer.close();             
    } catch (FileNotFoundException | UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}
lfvv
источник
0

Мой ответ:

JFileChooser chooser= new JFileChooser();
chooser.showOpenDialog(chooser);
File file = chooser.getSelectedFile();
String Content = "What you want to append to file";

try 
{
    RandomAccessFile random = new RandomAccessFile(file, "rw");
    long length = random.length();
    random.setLength(length + 1);
    random.seek(random.length());
    random.writeBytes(Content);
    random.close();
} 
catch (Exception exception) {
    //exception handling
}
userAsh
источник
0
/**********************************************************************
 * it will write content to a specified  file
 * 
 * @param keyString
 * @throws IOException
 *********************************************************************/
public static void writeToFile(String keyString,String textFilePAth) throws IOException {
    // For output to file
    File a = new File(textFilePAth);

    if (!a.exists()) {
        a.createNewFile();
    }
    FileWriter fw = new FileWriter(a.getAbsoluteFile(), true);
    BufferedWriter bw = new BufferedWriter(fw);
    bw.append(keyString);
    bw.newLine();
    bw.close();
}// end of writeToFile()
Михир Патель
источник
-1

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

 String fileName="/home/shriram/Desktop/Images/"+"test.txt";
  FileWriter fw=new FileWriter(fileName,true);    
  fw.write("here will be you content to insert or append in file");    
  fw.close(); 
  FileWriter fw1=new FileWriter(fileName,true);    
 fw1.write("another content will be here to be append in the same file");    
 fw1.close(); 
Ширам
источник
-1

1.7 Подход:

void appendToFile(String filePath, String content) throws IOException{

    Path path = Paths.get(filePath);

    try (BufferedWriter writer = 
            Files.newBufferedWriter(path, 
                    StandardOpenOption.APPEND)) {
        writer.newLine();
        writer.append(content);
    }

    /*
    //Alternative:
    try (BufferedWriter bWriter = 
            Files.newBufferedWriter(path, 
                    StandardOpenOption.WRITE, StandardOpenOption.APPEND);
            PrintWriter pWriter = new PrintWriter(bWriter)
            ) {
        pWriter.println();//to have println() style instead of newLine();   
        pWriter.append(content);//Also, bWriter.append(content);
    }*/
}
Саван Патвари
источник