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

В Java у меня есть текст из текстового поля в переменной String, называемый "текст".

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

Ответ 1

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

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 как и раньше.

Ответ 2

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

static void writeStringToFile(File file, String data) 

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

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

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

Ответ 3

Посмотрите Java File API

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

try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
    out.print(text);
}

Ответ 4

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

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)
    {
    }
}

Ответ 6

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

Ответ 7

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

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();
        }
    }
}

Ответ 8

В 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);

Ответ 9

Используйте 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>

Ответ 10

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

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();
        }
    }
}

Ответ 11

Я предпочитаю полагаться на библиотеки, когда это возможно, для такого рода операций. Это снижает вероятность того, что я случайно пропущу важный шаг (например, ошибку, сделанную выше). Некоторые библиотеки предложены выше, но мой фаворит для такого рода вещей - 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
}

Ответ 12

Используйте это, это очень читаемо:

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

Files.write(Paths.get(path), lines.getBytes(), StandardOpenOption.WRITE);

Ответ 13

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

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 ;
    }
};

Ответ 14

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

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

Ответ 15

Использование 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);
}

Ответ 16

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

FileUtils.writeStringToFile(new File("log.txt"), "my string", Charset.defaultCharset());

Ответ 17

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

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
        }
    }
}

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

Ответ 18

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

finally{
   if(writer != null){
     try{
        writer.flush();
        writer.close();
     }
     catch(IOException ioe){
         ioe.printStackTrace();
     }
   }
}

Ответ 19

private static void generateFile(String stringToWrite, String outputFile) {
try {       
    FileWriter writer = new FileWriter(outputFile);
    writer.append(stringToWrite);
    writer.flush();
    writer.close();
    log.debug("New File is generated ==>"+outputFile);
} catch (Exception exp) {
    log.error("Exception in generateFile ", exp);
}

}

Ответ 20

Вы можете использовать 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 (имя строки, сообщение ArrayList <String> ) {

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);        

}

Ответ 21

Я думаю, что лучший способ - это использование 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 CharSequence (т.е. String) вместо byte[] массив, таким образом text.getBytes() не требуется, что немного чище, я думаю.

Ответ 22

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

    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);
        }

    });

Ответ 23

Мой путь основан на потоке, потому что он работает на всех версиях 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;
}