Как добавить текст в существующий файл в Java - PullRequest
642 голосов
/ 26 октября 2009

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

Ответы [ 30 ]

5 голосов
/ 13 декабря 2012

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

    new FileWriter("outfilename", true)

2.nd параметр (true) - это функция (или интерфейс), называемая appendable (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, StringWrit9, Writer * 100) с этим * 100 Интерфейс может быть использован для добавления контента

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

5 голосов
/ 04 июня 2013

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

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);
}
4 голосов
/ 27 мая 2015

Попробуйте с 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);
}
3 голосов
/ 15 февраля 2017
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.
        }

    }

}
3 голосов
/ 07 января 2013
    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 голосов
/ 21 августа 2014

Лучше использовать 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();
    }
}
3 голосов
/ 22 июня 2015

Если мы используем 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();
}
2 голосов
/ 29 июня 2014

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

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
}
2 голосов
/ 24 марта 2014

Библиотека

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);
    }
}
2 голосов
/ 02 января 2014

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

Ребята, вы должны помнить, что вы, ребята, вызываете активные потоки, которые вы не вызываете асинхронно, и, вероятно, было бы неплохо от 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********/

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

...