Как сохранить строку в текстовом файле с помощью Java? - PullRequest
639 голосов
/ 27 июня 2009

В Java у меня есть текст из текстового поля в строковой переменной с именем «text».

Как сохранить содержимое переменной text в файл?

Ответы [ 23 ]

680 голосов
/ 27 июня 2009

Если вы просто выводите текст, а не двоичные данные, сработает следующее:

PrintWriter out = new PrintWriter("filename.txt");

Затем запишите в него свою строку так же, как в любой выходной поток:

out.println(text);

Вам понадобится обработка исключений, как всегда. Обязательно позвоните out.close(), когда закончите писать.

Если вы используете Java 7 или новее, вы можете использовать « оператор try-with-resources », который автоматически закроет ваш PrintStream, когда вы закончите с ним (т.е. выйдите из блока) вот так:

try (PrintWriter out = new PrintWriter("filename.txt")) {
    out.println(text);
}

Вам все равно нужно будет явно бросить java.io.FileNotFoundException, как и раньше.

230 голосов
/ 27 июня 2009

Apache Commons IO содержит несколько отличных методов для этого, в частности FileUtils содержит следующий метод:

static void writeStringToFile(File file, String data) 

, который позволяет записывать текст в файл одним вызовом метода:

FileUtils.writeStringToFile(new File("test.txt"), "Hello File");

Возможно, вы также захотите указать кодировку для файла.

86 голосов
/ 27 июня 2009

Взгляните на Java File API

быстрый пример:

try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
    out.print(text);
}
78 голосов
/ 27 июня 2009

Просто сделал что-то похожее в моем проекте. Использование FileWriter упростит часть вашей работы. И здесь вы можете найти хороший учебник .

BufferedWriter writer = null;
try
{
    writer = new BufferedWriter( new FileWriter( yourfilename));
    writer.write( yourstring);

}
catch ( IOException e)
{
}
finally
{
    try
    {
        if ( writer != null)
        writer.close( );
    }
    catch ( IOException e)
    {
    }
}
69 голосов
/ 17 марта 2014

В Java 7 вы можете сделать это:

String content = "Hello File!";
String path = "C:/a.txt";
Files.write( Paths.get(path), content.getBytes(), StandardOpenOption.CREATE);

Более подробная информация здесь: http://www.drdobbs.com/jvm/java-se-7-new-file-io/231600403

59 голосов
/ 27 июня 2009

Используйте FileUtils.writeStringToFile() из Apache Commons IO . Не нужно изобретать это колесо.

21 голосов
/ 27 июня 2009

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

import java.io.*;

public class Main {

    public static void main(String[] args) {

        try {
            String str = "SomeMoreTextIsHere";
            File newTextFile = new File("C:/thetextfile.txt");

            FileWriter fw = new FileWriter(newTextFile);
            fw.write(str);
            fw.close();

        } catch (IOException iox) {
            //do stuff with exception
            iox.printStackTrace();
        }
    }
}
13 голосов
/ 15 декабря 2018

В Java 11 класс java.nio.file.Files был расширен двумя новыми служебными методами для записи строки в файл (см. JavaDoc здесь и здесь ) , В простейшем случае это теперь однострочник:

Files.writeString(Paths.get("some/path"), "some_string");

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

12 голосов
/ 01 марта 2013

Используйте Apache Commons IO api. Это просто

Использовать API как

 FileUtils.writeStringToFile(new File("FileNameToWrite.txt"), "stringToWrite");

Зависимость Maven

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>
11 голосов
/ 29 июня 2012

Я предпочитаю полагаться на библиотеки, когда это возможно, для такого рода операций. Это снижает вероятность того, что я случайно пропущу важный шаг (например, ошибку, сделанную выше). Некоторые библиотеки предложены выше, но мой любимый для такого рода вещей - Google Guava . У Guava есть класс Files , который отлично подходит для этой задачи:

// This is where the file goes.
File destination = new File("file.txt");
// This line isn't needed, but is really useful 
// if you're a beginner and don't know where your file is going to end up.
System.out.println(destination.getAbsolutePath());
try {
    Files.write(text, destination, Charset.forName("UTF-8"));
} catch (IOException e) {
    // Useful error handling here
}
...