it-swarm.com.de

Wie speichere ich einen String in einer Textdatei mit Java?

In Java habe ich Text aus einem Textfeld in einer String-Variablen namens "Text".

Wie kann ich den Inhalt der Variablen "text" in einer Datei speichern?

607
Justin White

Wenn Sie nur Text und keine binären Daten ausgeben, funktioniert Folgendes:

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

Dann schreiben Sie Ihren String wie jeden Ausgabestrom:

out.println(text);

Sie benötigen wie immer Ausnahmebehandlung. Rufen Sie unbedingt out.close() auf, wenn Sie mit dem Schreiben fertig sind.

Wenn Sie Java 7 oder höher verwenden, können Sie die " try-with-resources-Anweisung " verwenden, die Ihre PrintStream automatisch schließt, wenn Sie damit fertig sind (dh den Block verlassen).

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

Sie müssen den Java.io.FileNotFoundException weiterhin wie zuvor explizit werfen.

651
Jeremy Smyth

Apache Commons IO enthält einige hervorragende Methoden, insbesondere FileUtils enthält die folgende Methode:

static void writeStringToFile(File file, String data) 

damit können Sie Text in einem Methodenaufruf in eine Datei schreiben:

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

Möglicherweise möchten Sie auch die Kodierung für die Datei angeben.

224
Jon

Schauen Sie sich die Java File API an

ein kurzes Beispiel:

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

Ich habe einfach etwas Ähnliches in meinem Projekt gemacht. Verwenden Sie FileWriter , um einen Teil Ihrer Arbeit zu vereinfachen. Und hier findest du Nice 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)
    {
    }
}
78
Artem Barger

In Java 7 können Sie Folgendes tun:

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

Weitere Informationen finden Sie hier: http://www.drdobbs.com/jvm/Java-se-7-new-file-io/231600403

64
Daniil Shevelev

Verwenden Sie FileUtils.writeStringToFile() aus Apache Commons IO . Dieses Rad muss nicht neu erfunden werden.

56
skaffman

Sie können den folgenden Code ändern, um Ihre Datei von der Klasse oder Funktion zu schreiben, die den Text verarbeitet. Man fragt sich jedoch, warum die Welt einen neuen Texteditor braucht ...

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

Verwenden Sie Apache Commons IO. Es ist einfach 

API als verwenden

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

Maven-Abhängigkeit

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

Ich ziehe es vor, für diese Art von Operationen wann immer möglich auf Bibliotheken zu setzen. Dies macht es weniger wahrscheinlich, dass ich versehentlich einen wichtigen Schritt auslasse (wie oben angeführte Irrtümer der Wolfsnipes). Einige Bibliotheken werden oben vorgeschlagen, aber mein Favorit für diese Art von Dingen ist Google Guava . Guava hat eine Klasse namens Files , die für diese Aufgabe gut geeignet ist:

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

Falls Sie eine Textdatei erstellen müssen, die auf einer einzelnen Zeichenfolge basiert:

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

Sie können diese Methode in Ihre Klassen einfügen. Wenn Sie diese Methode in einer Klasse mit einer Hauptmethode verwenden, ändern Sie diese Klasse in statisch, indem Sie den statischen Schlüssel Word hinzufügen. In beiden Fällen müssen Sie Java.io. * importieren, damit es funktioniert. Andernfalls werden File, FileWriter und BufferedWriter nicht erkannt. 

10

Sie könnten das tun:

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

Verwenden Sie dies, es ist sehr lesbar:

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

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

Java 7 verwenden:

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

Verwenden von org.Apache.commons.io.FileUtils:

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

Wenn Sie nur einen Textblock in eine Datei verschieben möchten, wird er jedes Mal überschrieben.

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

In diesem Beispiel kann der Benutzer eine Datei mithilfe einer Dateiauswahl auswählen.

In Java 11 wurde die Klasse Java.nio.file.Files um zwei neue Dienstprogrammmethoden erweitert, um einen String in eine Datei zu schreiben (siehe JavaDoc hier und hier ). Im einfachsten Fall ist es jetzt ein Einzeiler:

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

Mit dem optionalen Parameter Varargs können weitere Optionen festgelegt werden, z. B. das Anhängen an eine vorhandene Datei oder das automatische Erstellen einer nicht vorhandenen Datei (siehe JavaDoc hier ).

5
Marcel

Es ist besser, den Writer/Outputstream in einem finally-Block zu schließen, für den Fall, dass etwas passiert

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

Ich denke, der beste Weg ist 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));

Siehe Javadoc :

Schreiben Sie Textzeilen in eine Datei. Jede Zeile ist eine Zeichenfolge und lautet Der Reihe nach wird die Datei in die Datei geschrieben, wobei jede Zeile durch die Endung .__ abgeschlossen wird. Zeilentrennzeichen der Plattform, wie durch die Systemeigenschaft definiert line.separator. Zeichen werden mit der angegebenen .__ in Bytes codiert. Zeichensatz.

Der Parameter options gibt an, wie die Datei erstellt oder geöffnet wird . Wenn keine Optionen vorhanden sind, funktioniert diese Methode wie bei CREATE, TRUNCATE_EXISTING und WRITE-Optionen sind vorhanden. Mit anderen Worten: es öffnet die Datei zum Schreiben und erstellt die Datei, falls sie nicht vorhanden ist, oder Eine vorhandene reguläre Datei wird zunächst auf eine Größe von 0 gekürzt. Das Diese Methode stellt sicher, dass die Datei geschlossen wird, wenn alle Zeilen ____ wurden. geschrieben (oder ein E/A-Fehler oder eine andere Laufzeitausnahme wird ausgelöst). Wenn ein Ein E/A-Fehler tritt dann auf, nachdem die Datei erstellt wurde, oder abgeschnitten oder nachdem einige Bytes in die Datei geschrieben wurden.

Bitte beachten Sie. Ich sehe, dass die Leute bereits mit dem in Java integrierten Files.write geantwortet haben, aber das Besondere an meiner Antwort, die niemand zu erwähnen scheint, ist die überladene Version der Methode, die ein Iterable von CharSequence (dh String) anstelle eines byte[]-Arrays benötigt, also text.getBytes(). ist nicht erforderlich, was meiner Meinung nach etwas sauberer ist.

0
alb-i986

Sie können die ArrayList verwenden, um den gesamten Inhalt der TextArea als Beispiel zu verwenden und als Parameter zu senden, indem Sie das Speichern aufrufen, da der Writer gerade Stringzeilen geschrieben hat. Dann verwenden wir das "for" Zeile für Zeile, um unsere ArrayList am Ende zu schreiben Wir werden TextArea in txt-Datei enthalten. Wenn etwas nicht sinnvoll ist, tut es mir leid, Google Übersetzer und ich, die kein Englisch sprechen.

Schauen Sie sich den Windows-Editor an, er springt nicht immer Zeilen und zeigt alle in einer Zeile, verwenden Sie 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> -Meldung) {

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

Mein Weg basiert auf Stream, da alle Android-Versionen ausgeführt werden und es erforderlich ist, Ressourcen wie URL/URI zu finden. Alle Vorschläge sind willkommen.

Streams (InputStream und OutputStream) übertragen binäre Daten, wenn Entwickler einen String in einen Stream schreiben, ihn zuerst in Bytes konvertieren oder mit anderen Worten codieren.

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
牟家宏

Wenn Sie die Wagenrücklaufzeichen aus der Zeichenfolge in einer Datei behalten möchten, gibt es ein Codebeispiel:

    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