it-swarm.com.ru

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

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

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

607
Justin White

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

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

651
Jeremy Smyth

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

static void writeStringToFile(File file, String data) 

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

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

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

224
Jon

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

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

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

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

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)
    {
    }
}
78
Artem Barger

В 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

64
Daniil Shevelev

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

56
skaffman

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

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

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

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

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

Maven Dependency

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>
12
Anirban Chakrabarti

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

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

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

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

10
Sean H. Worthington

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

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 ;
    }
};
10
Mostafa Rezaei

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

import Java.nio.file.Files;
import Java.nio.file.Paths;

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

Используя 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);
}
10
BullyWiiPlaza

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

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

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

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

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

6
422_unprocessable_entity

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

Files.writeString(Paths.get("somepath"), "some_string");

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

5
Marcel

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

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

Я думаю, что лучше всего использовать 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() не требуется, что немного чище, я думаю.

0
alb-i986

Вы можете использовать ArrayList, чтобы поместить все содержимое TextArea в качестве примера, и отправить в качестве параметра, вызвав save, так как писатель только что записал строковые строки, а затем мы будем использовать строку «for» построчно, чтобы написать наш ArrayList в конце мы будем содержимое TextArea в текстовом файле. если что-то не имеет смысла, извините, 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);        

}

0
Paulo Brito
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);
}

}

0
Jobin Mathew

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

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

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

    });
0
QA Specialist