Как сохранить строку в текстовый файл с помощью Java?

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

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


person Justin White    schedule 27.06.2009    source источник


Ответы (24)


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

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

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

out.println(text);

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

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

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

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

person Jeremy Smyth    schedule 27.06.2009
comment
Что такое обработка исключений? Где будет сохранен этот файл? - person Justin White; 28.06.2009
comment
он будет сохранен в текущем каталоге, независимо от того, что касается JVM. Обработка исключений - это функция try {} catch () {}, которую вы видите в других ответах :) - person Jeremy Smyth; 28.06.2009
comment
@Justin, вы также можете передать абсолютный путь (например, /tmp/filename.txt) конструктору FileOutputStream, чтобы сохранить файл в любом месте. - person Jonik; 28.06.2009
comment
Кстати, это можно упростить, используя удобные конструкторы, которые у PrintStream есть с 1.5. Этого было бы достаточно: PrintStream out = new PrintStream (filename.txt); - person Jonik; 28.06.2009
comment
Более того, поскольку мы выводим текст, PrintWriter будет более подходящим и таким же удобным. Из PrintStream javadocs: Класс PrintWriter следует использовать в ситуациях, когда требуется запись символов, а не байтов. - person Jonik; 28.06.2009
comment
Но в какой-то момент нужно закрыть этот файл ...? codecodex.com/wiki/ASCII_file_save#Java - person JStrahl; 22.06.2012
comment
новый PrintWriter (файл) .println (вывод); приводит к 0-байтовому файлу. Вывод представляет собой строку из 6000 символов ... Независимо от того, существует ли файл уже или нет ... - person lisak; 04.09.2012
comment
@Sloin @Devolus Ты обязательно позвонил out.close()? Он записывает пустой файл, если PrintWriter перед очисткой или закрытием собирает мусор, но если вы close() правильно, он записывает файл. - person Jeremy Smyth; 01.08.2013
comment
Вы хотите использовать try {} catch () {} finally {}, где в finally {} вы закрываете файл, если он не равен нулю. - person Benas; 13.08.2014
comment
В java8 вы можете попробовать (PrintStream ps = new PrintStream (filename)) {ps.println (out); } это будет обрабатывать близко для вас - person Anton Chikin; 06.02.2015
comment
Что касается комментария @AntonChikin выше: вы также можете сделать это в Java 7 - person yegeniy; 17.03.2015
comment
Вы можете попробовать напечатать очень длинный текст? Когда я делаю это с текстом, содержащим 8 855 704 символа и 197 247 разрывов строк, он записывает в файл только 197 127 строк. (Используя приведенный выше код с попыткой catch ofc) - ›Использование FileWriter решило мою проблему. используйте там функцию .write (String) ... - person codewing; 13.08.2015
comment
В предпоследнем абзаце отсутствует слово (глагол) - person shieldgenerator7; 02.02.2016
comment
как насчет эффективности этого кода? Я пишу миллион строк строки в файл с помощью printWriter в течение полдня, и он все еще работает. - person Chit Khine; 27.09.2016
comment
Также см. Ответ Java11 ниже. - person Stefan; 07.03.2019

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

static void writeStringToFile(File file, String data) 

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

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

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

person Jon    schedule 27.06.2009
comment
Небольшое исправление, второй фрагмент должен выглядеть так: FileUtils.writeStringToFile (новый файл (test.txt), Hello File); - person pm_labs; 09.02.2012
comment
Для тех из нас, кто предпочитает Guava, он тоже может это делать. - person Jonik; 29.12.2013
comment
Функция устарела, вам следует добавить кодировку по умолчанию - ›FileUtils.writeStringToFile(new File("test.txt"), "Hello File", forName("UTF-8")); - person Paul Fournel; 09.11.2017

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

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

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

person Daniil Shevelev    schedule 17.03.2014
comment
На случай, если кто-то позже задался вопросом, кодировка будет стандартом платформы. - person Haakon Løtveit; 29.11.2015
comment
content.getBytes(StandardCharsets.UTF_8) можно использовать для явного определения кодировки. - person John29; 28.04.2016
comment
Обратите внимание, что StandardOpenOption.CREATE не является значением по умолчанию StandardOpenOption.CREATE, а StandardOpenOption.TRUNCATE_EXISTING используется по умолчанию. Чтобы использовать значение по умолчанию, просто удалите третий параметр. - person Tinus Tate; 10.01.2019
comment
См. Комментарий Тинуса Тейта! Каков процесс редактирования этого примера? Интересно, сколько тысяч людей приняли этот пример как есть только для того, чтобы обнаружить, что у них есть неожиданные результаты, когда они перезаписывают файл более короткой строкой. Как указывает Тинус, TRUNCATE_EXISTING имеет решающее значение, если вы полностью не понимаете и не имеете реальной причины не желать обрезать существующий файл при перезаписи более короткой строкой. - person jch; 09.10.2019
comment
В java 11 вы можете просто указать String в качестве второго параметра! Ура! - person Dennis Gloss; 20.11.2019

Взгляните на API файлов Java

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

try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
    out.print(text);
}
person Jorn    schedule 27.06.2009
comment
@ XP1 Я знаю, это большое улучшение. Я использовал для этого Lombok в Java 6: просто идите @Cleanup new FileOutputStream(...), и все готово. - person Jorn; 04.09.2011
comment
Не забудьте вызвать out.flush (); затем out.close (); - person Alex Byrth; 11.01.2016
comment
@AlexByrth, почему он должен? - person Andrew Tobilko; 11.09.2018
comment
Большие файлы записываются в фоновом режиме (другой поток), и для записи требуется время. Вызов flush () гарантирует, что все было записано в следующей строке, синхронизируя операцию. Но это необязательно, но хорошая практика, если вы обрабатываете большие файлы как журналы. - person Alex Byrth; 12.09.2018
comment
Обратите внимание, что out.close () уже очищает поток, а это значит, что вызывать out.flush () не нужно. - person hjk321; 31.12.2019

Просто сделал что-то подобное в моем проекте. Использование 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)
    {
    }
}
person Artem Barger    schedule 27.06.2009
comment
Удалив все команды try / catch и упростив их, я также могу сделать это в одной строке, просто выполнив: (new BufferedWriter (new FileWriter (filename))). Write (str); - person Artem Barger; 27.06.2009
comment
Итак, покажите свое простое и красивое решение. Буду рад узнать, как это сделать лучше. - person Artem Barger; 28.06.2009
comment
Не обращайте внимания на троллей ... они всегда критикуют, не предлагая собственного решения. Спасибо, что избавили меня от написания собственного кода / загрузки дополнительной библиотеки и введения зависимости ... - person nikib3ro; 27.01.2011
comment
Оборачивание FileWriter в BufferedWriter излишне, когда вы записываете весь файл за один вызов write(). - person Adrian Pronk; 22.11.2011
comment
Кажется, что .close() не бросает (по крайней мере, в Java 7?), Возможно, последний trycatch является избыточным? - person Kos; 14.06.2012
comment
Проглатывание подобных исключений усложнит вам жизнь, когда исключения действительно случаются. По крайней мере, вы должны перебросить их: throw new RuntimeException(e); - person Roger Keays; 11.02.2013

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

person skaffman    schedule 27.06.2009
comment
Я не мог больше не согласиться. Эти библиотеки есть, поэтому мы не вносим тонких ошибок в такое простое решение. - person skaffman; 28.06.2009
comment
Вы бы посоветовали ему вернуться и повторно реализовать java.file.IO и java.io.PrintStream в необработанном C? Конечно, нет. Вы используете абстракции java.io и экономите силы для реальных проблем. И Commons IO - лучшая абстракция, чем java.io, когда дело касается этой конкретной проблемы. - person skaffman; 28.06.2009
comment
Нет, конечно, нет. Я только не согласен с тем, что ваше решение, возможно, не первое, что я бы бросил кому-то, начинающему программисту на Java. Вы же не хотите сказать, что никогда не писали ничего подобного? - person duffymo; 28.06.2009
comment
У меня есть, да, но это до того, как я нашел commons-io. С тех пор, как я обнаружил это, я никогда не писал такие вещи вручную, даже в одноклассном проекте. Если бы я знал об этом с первого дня, я бы использовал его с первого дня. - person skaffman; 28.06.2009
comment
Совершенно верно, но вы опытный разработчик. В вашей биографии говорится, что вы являетесь пользователем JBOSS / Spring, но, конечно же, вы бы не подошли ни к одному из них в своей первой работе Hello, World. Я не возражаю против правильного использования библиотек. Я говорю, что люди, впервые пытающиеся освоить язык, должны попытаться познать его в основе, даже если для этого потребуется делать то, от чего они откажутся позже, когда они будут иметь опыт и знания. - person duffymo; 28.06.2009
comment
Я реализовал это без общих прав и получил менее очевидное исключение. Затем я реализовал это с помощью общих ресурсов, и он сказал мне, что именно не так. Мораль истории: зачем жить в темные века, если вам не нужно? - person SilentNot; 14.04.2014
comment
@duffymo: в любом случае путь Commons теперь перемещен на Java 7: D - person Mr_and_Mrs_D; 17.04.2014
comment
+1 за использование известной библиотеки. Нам по-прежнему нужны ответы снизу и ориентированные на опытных разработчиков - person Sergio A.; 04.07.2019

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

Files.writeString(Path.of("my", "path"), "My String");

И второй метод (см. JavaDoc здесь) позволяет указать индивидуальную кодировку:

Files.writeString(Path.of("my", "path"), "My String", StandardCharset.ISO_8859_1);

Оба метода имеют необязательный параметр Varargs для настройки параметров обработки файлов (см. JavaDoc здесь). В следующем примере будет создан несуществующий файл или добавлена ​​строка к существующему:

Files.writeString(Path.of("my", "path"), "String to append", StandardOpenOption.CREATE, StandardOpenOption.APPEND);
person Marcel    schedule 15.12.2018
comment
Для этого нужно больше голосов. Ответ скрывается в количестве ответов на этот вопрос, но он превосходит многие из них. Например требуется только минимальное количество строк, также нет зависимости от Apache Commons. - person Koenigsberg; 29.03.2021
comment
За этот ответ следует проголосовать :-) - person Exploring; 21.04.2021

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

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();
        }
    }
}
person Community    schedule 27.06.2009
comment
Это не закрывает файл в случае исключения. - person Tom Hawtin - tackline; 28.06.2009
comment
@JanusTroelsen: в случае отказа укажите The try-with-resources Заявление. - person trashgod; 22.02.2013

Я предпочитаю по возможности полагаться на библиотеки для такого рода операций. Это снижает вероятность того, что я случайно пропущу важный шаг (например, волкодав, сделанный выше). Некоторые библиотеки предложены выше, но мне больше всего нравится 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
}
person Spina    schedule 28.06.2012
comment
Если вы используете Guava, есть также Charsets.UTF-8. - person florian; 30.10.2015
comment
@florian: На самом деле это Charsets.UTF_8 - person Tim Büthe; 29.03.2016
comment
Родительская папка должна существовать. Пример: destination.mkdirs (). - person AlikElzin-kilaka; 19.06.2018
comment
Files.write (CharSequence from, File to, Charset charset) устарел в guava 26.0. - person Donald Duck; 18.07.2019
comment
Современная альтернатива Guava устаревшим Files.write: Files.asCharSink(file, charset).write(text) - person Vadzim; 07.04.2020

Используйте 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>
person Anirban Chakrabarti    schedule 01.03.2013

Используйте это, это очень удобно:

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

Files.write(Paths.get(path), lines.getBytes(), StandardOpenOption.WRITE);
person Ran Adler    schedule 11.12.2014
comment
Это также копия существующего ответа. : c - person james.garriss; 21.07.2016
comment
извините, но я не изобретал java8, я не единственный, кто использует эту строку. но это не копия прошлого из других ответов на тот же вопрос - person Ran Adler; 24.07.2016

Использование Java 7:

public static void writeToFile(String text, String targetFilePath) throws IOException
{
    Path targetPath = Paths.get(targetFilePath);
    byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
    Files.write(targetPath, bytes, StandardOpenOption.CREATE);
}
person BullyWiiPlaza    schedule 25.05.2016
comment
Слово для мудрых - это создаст новый файл, если его нет, но перезапишет символы существующего файла, если он есть. Если новые данные меньше, это будет означать, что вы, вероятно, создали поврежденный файл. Спроси меня, откуда я знаю! - person Chris Rae; 06.02.2017
comment
Хорошо, откуда ты знаешь? - person ojblass; 10.03.2018
comment
Тогда просто используйте Files.write(targetPath, bytes);, чтобы перезаписать файл. Это будет работать как положено. - person BullyWiiPlaza; 10.03.2018

Если вам нужно создать текстовый файл на основе одной строки:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class StringWriteSample {
    public static void main(String[] args) {
        String text = "This is text to be saved in file";

        try {
            Files.write(Paths.get("my-file.txt"), text.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
person Pavel_H    schedule 30.06.2017
comment
Files.write (path, byte []) будет использовать кодировку UTF-8. String.getBytes () использует кодировку платформы по умолчанию. Так что это потенциальная проблема. Используйте string.getBytes (StandardCharsets.UTF_8)! - person rmuller; 15.06.2019

import java.io.*;

private void stringToFile( String text, String fileName )
 {
 try
 {
    File file = new File( fileName );

    // if file doesnt exists, then create it 
    if ( ! file.exists( ) )
    {
        file.createNewFile( );
    }

    FileWriter fw = new FileWriter( file.getAbsoluteFile( ) );
    BufferedWriter bw = new BufferedWriter( fw );
    bw.write( text );
    bw.close( );
    //System.out.println("Done writing to " + fileName); //For testing 
 }
 catch( IOException e )
 {
 System.out.println("Error: " + e);
 e.printStackTrace( );
 }
} //End method stringToFile

Вы можете вставить этот метод в свои классы. Если вы используете этот метод в классе с основным методом, измените этот класс на статический, добавив ключевое слово static. В любом случае вам нужно будет импортировать java.io. *, чтобы он работал, иначе File, FileWriter и BufferedWriter не будут распознаны.

person Sean H. Worthington    schedule 05.11.2014

Вы могли сделать это:

import java.io.*;
import java.util.*;

class WriteText
{
    public static void main(String[] args)
    {   
        try {
            String text = "Your sample content to save in a text file.";
            BufferedWriter out = new BufferedWriter(new FileWriter("sample.txt"));
            out.write(text);
            out.close();
        }
        catch (IOException e)
        {
            System.out.println("Exception ");       
        }

        return ;
    }
};
person Mostafa Rezaei    schedule 20.11.2011

Использование org.apache.commons.io.FileUtils:

FileUtils.writeStringToFile(new File("log.txt"), "my string", Charset.defaultCharset());
person GoYun.Info    schedule 04.01.2017

Если вы хотите поместить в файл только один блок текста, он будет каждый раз перезаписывать его.

JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
    FileOutputStream stream = null;
    PrintStream out = null;
    try {
        File file = chooser.getSelectedFile();
        stream = new FileOutputStream(file); 
        String text = "Your String goes here";
        out = new PrintStream(stream);
        out.print(text);                  //This will overwrite existing contents

    } catch (Exception ex) {
        //do something
    } finally {
        try {
            if(stream!=null) stream.close();
            if(out!=null) out.close();
        } catch (Exception ex) {
            //do something
        }
    }
}

В этом примере пользователь может выбрать файл с помощью средства выбора файлов.

person bhathiya-perera    schedule 13.08.2013
comment
@Eric Leschinski: спасибо, что сделали мой ответ более профессиональным (я также предположил, что это именно то, что хотел OP, поскольку это то, что на самом деле хочет большинство людей, просто сбросьте текст и замените его) - person bhathiya-perera; 15.08.2013
comment
После того, как на исходный вопрос был дан ответ, а OP удовлетворен и давно исчез, подобные страницы служат только полезным артефактом для людей, которые попадают сюда из поиска Google. Я зашел на эту страницу, чтобы создать мини-текстовое приложение к файлу. Так что лучше говорить со всей аудиторией, а не с OP после того, как OP переместится. - person Eric Leschinski; 16.08.2013

Лучше закрыть писатель / выходной поток в блоке finally, на случай, если что-то случится.

finally{
   if(writer != null){
     try{
        writer.flush();
        writer.close();
     }
     catch(IOException ioe){
         ioe.printStackTrace();
     }
   }
}
person Community    schedule 27.06.2009
comment
еще лучше: используйте try-with-resources - person Janus Troelsen; 22.02.2013
comment
Да, @JanusTroelsen прав, лучше используйте инструкцию try-with-resources docs.oracle.com/javase/tutorial/essential/exceptions/ - person ; 21.06.2015

В основном тот же ответ как здесь, но его легко скопировать / вставить, и он просто работает ;-)

  import java.io.FileWriter;

  public void saveToFile(String data, String filename) {
    try (
      FileWriter fw = new FileWriter(filename)) {
      fw.write(data);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
person Brad Parks    schedule 18.08.2020

Я думаю, что лучше всего использовать Files.write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options):

String text = "content";
Path path = Paths.get("path", "to", "file");
Files.write(path, Arrays.asList(text));

См. javadoc:

Напишите строки текста в файл. Каждая строка представляет собой последовательность символов и записывается в файл последовательно, каждая строка заканчивается разделителем строк платформы, как определено системным свойством line.separator. Символы кодируются в байты с использованием указанной кодировки.

Параметр options указывает, как файл создается или открывается. Если параметры отсутствуют, этот метод работает так, как если бы присутствовали параметры CREATE, TRUNCATE_EXISTING и WRITE. Другими словами, он открывает файл для записи, создания файла, если он не существует, или первоначального усечения существующего обычного файла до размера 0. Этот метод гарантирует, что файл будет закрыт, когда все строки будут записаны ( или возникает ошибка ввода-вывода или другое исключение времени выполнения). Если возникает ошибка ввода-вывода, это может происходить после того, как файл был создан или усечен, или после того, как в файл были записаны некоторые байты.

Пожалуйста, обрати внимание. Я вижу, что люди уже ответили встроенным в Java Files.write, но что особенного в моем ответе, о котором, кажется, никто не упоминает, - это перегруженная версия метода, который принимает Iterable of CharSequence (т.е. String) вместо массива byte[], таким образом text.getBytes() не требуется, что, я думаю, немного чище.

person alb-i986    schedule 05.02.2018

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

    jLabel1 = new JLabel("Enter SQL Statements or SQL Commands:");
    orderButton = new JButton("Execute");
    textArea = new JTextArea();
    ...


    // String captured from JTextArea()
    orderButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            // When Execute button is pressed
            String tempQuery = textArea.getText();
            tempQuery = tempQuery.replaceAll("\n", "\r\n");
            try (PrintStream out = new PrintStream(new FileOutputStream("C:/Temp/tempQuery.sql"))) {
                out.print(tempQuery);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(tempQuery);
        }

    });
person QA Specialist    schedule 25.06.2018

Мой способ основан на потоке из-за работы на всех версиях Android и потребностей в ресурсах, таких как URL / URI, любые предложения приветствуются.

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

public boolean writeStringToFile(File file, String string, Charset charset) {
    if (file == null) return false;
    if (string == null) return false;
    return writeBytesToFile(file, string.getBytes((charset == null) ? DEFAULT_CHARSET:charset));
}

public boolean writeBytesToFile(File file, byte[] data) {
    if (file == null) return false;
    if (data == null) return false;
    FileOutputStream fos;
    BufferedOutputStream bos;
    try {
        fos = new FileOutputStream(file);
        bos = new BufferedOutputStream(fos);
        bos.write(data, 0, data.length);
        bos.flush();
        bos.close();
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
        Logger.e("!!! IOException");
        return false;
    }
    return true;
}
person 牟家宏    schedule 20.11.2018
comment
Пожалуйста, добавьте правильную обработку ошибок, закрытие всех открытых ресурсов и распространение исключений - person Boris Brodski; 27.04.2020

Вы можете использовать ArrayList, чтобы поместить все содержимое TextArea, например, и отправить как параметр, вызвав сохранение, поскольку писатель просто написал строковые строки, затем мы используем «for» построчно для записи нашего ArrayList в конце мы будем содержимое TextArea в txt файле. Если что-то не имеет смысла, извините, это переводчик Google, а я не говорю по-английски.

Посмотрите на Блокнот Windows, он не всегда перескакивает по строкам и показывает все в одну строку, используйте Wordpad нормально.


private void SaveActionPerformed(java.awt.event.ActionEvent evt) {

    String NameFile = Name.getText();
    ArrayList< String > Text = new ArrayList< String >();

    Text.add(TextArea.getText());

    SaveFile(NameFile, Text);
}

public void SaveFile(String name, ArrayList< String> message) {

    path = "C:\\Users\\Paulo Brito\\Desktop\\" + name + ".txt";

    File file1 = new File(path);

    try {

        if (!file1.exists()) {

            file1.createNewFile();
        }


        File[] files = file1.listFiles();


        FileWriter fw = new FileWriter(file1, true);

        BufferedWriter bw = new BufferedWriter(fw);

        for (int i = 0; i < message.size(); i++) {

            bw.write(message.get(i));
            bw.newLine();
        }

        bw.close();
        fw.close();

        FileReader fr = new FileReader(file1);

        BufferedReader br = new BufferedReader(fr);

        fw = new FileWriter(file1, true);

        bw = new BufferedWriter(fw);

        while (br.ready()) {

            String line = br.readLine();

            System.out.println(line);

            bw.write(line);
            bw.newLine();

        }
        br.close();
        fr.close();

    } catch (IOException ex) {
        ex.printStackTrace();
        JOptionPane.showMessageDialog(null, "Error in" + ex);     
    }   
}
person Paulo Brito    schedule 01.12.2014
comment
Вы можете оставить кучу ресурсов открытыми. Это плохая практика, пожалуйста, не делайте этого. - person Boris Brodski; 27.04.2020

person    schedule
comment
Хотя этот фрагмент кода может быть решением, включая объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причины вашего предложения кода. - person Johan; 10.05.2019
comment
close () может никогда не вызываться. Пожалуйста, улучшите свой ответ, добавив правильную обработку ошибок. - person Boris Brodski; 27.04.2020