Frage Wie erstelle ich eine Datei und schreibe dazu in Java?


Was ist der einfachste Weg, um eine (Text-) Datei in Java zu erstellen und zu schreiben?


1130
2018-05-21 19:58


Ursprung


Antworten:


Beachten Sie, dass jedes der folgenden Codebeispiele möglicherweise ausgelöst wird IOException. Try / catch / finally-Blöcke wurden der Kürze halber weggelassen. Sehen dieses Tutorial für Informationen zur Ausnahmebehandlung.

Erstellen einer Textdatei (beachten Sie, dass dadurch die Datei überschrieben wird, wenn sie bereits existiert):

PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8");
writer.println("The first line");
writer.println("The second line");
writer.close();

Erstellen einer Binärdatei (dadurch wird auch die Datei überschrieben):

byte data[] = ...
FileOutputStream out = new FileOutputStream("the-file-name");
out.write(data);
out.close();

Java 7+ Benutzer können das verwenden Files Klasse zum Schreiben in Dateien:

Erstellen einer Textdatei:

List<String> lines = Arrays.asList("The first line", "The second line");
Path file = Paths.get("the-file-name.txt");
Files.write(file, lines, Charset.forName("UTF-8"));
//Files.write(file, lines, Charset.forName("UTF-8"), StandardOpenOption.APPEND);

Erstellen einer Binärdatei:

byte data[] = ...
Path file = Paths.get("the-file-name");
Files.write(file, data);
//Files.write(file, data, StandardOpenOption.APPEND);

1454
2018-05-21 20:06



In Java 7 und höher:

try (Writer writer = new BufferedWriter(new OutputStreamWriter(
              new FileOutputStream("filename.txt"), "utf-8"))) {
   writer.write("something");
}

Dafür gibt es nützliche Dienstprogramme:

Beachten Sie auch, dass Sie kann benutze einen FileWriter, aber es verwendet die Standardcodierung, die oft eine schlechte Idee ist - es ist am besten, die Codierung explizit anzugeben.

Unten ist die ursprüngliche Antwort vor Java 7


Writer writer = null;

try {
    writer = new BufferedWriter(new OutputStreamWriter(
          new FileOutputStream("filename.txt"), "utf-8"));
    writer.write("Something");
} catch (IOException ex) {
    // Report
} finally {
   try {writer.close();} catch (Exception ex) {/*ignore*/}
}

Siehe auch: Lesen, Schreiben und Erstellen von Dateien (enthält NIO2).


355
2018-05-21 20:09



Wenn Sie bereits den Inhalt haben, den Sie in die Datei schreiben möchten (und nicht im laufenden Betrieb generiert werden), java.nio.file.Files Darüber hinaus bietet Java 7 als Teil der nativen I / O die einfachste und effizienteste Möglichkeit, Ihre Ziele zu erreichen.

Grundsätzlich ist das Erstellen und Schreiben einer Datei nur eine Zeile ein einfacher Methodenaufruf!

Das folgende Beispiel erstellt und beschreibt 6 verschiedene Dateien, um zu zeigen, wie sie verwendet werden können:

Charset utf8 = StandardCharsets.UTF_8;
List<String> lines = Arrays.asList("1st line", "2nd line");
byte[] data = {1, 2, 3, 4, 5};

try {
    Files.write(Paths.get("file1.bin"), data);
    Files.write(Paths.get("file2.bin"), data,
            StandardOpenOption.CREATE, StandardOpenOption.APPEND);
    Files.write(Paths.get("file3.txt"), "content".getBytes());
    Files.write(Paths.get("file4.txt"), "content".getBytes(utf8));
    Files.write(Paths.get("file5.txt"), lines, utf8);
    Files.write(Paths.get("file6.txt"), lines, utf8,
            StandardOpenOption.CREATE, StandardOpenOption.APPEND);
} catch (IOException e) {
    e.printStackTrace();
}

118
2018-04-22 14:01



public class Program {
    public static void main(String[] args) {
        String text = "Hello world";
        BufferedWriter output = null;
        try {
            File file = new File("example.txt");
            output = new BufferedWriter(new FileWriter(file));
            output.write(text);
        } catch ( IOException e ) {
            e.printStackTrace();
        } finally {
          if ( output != null ) {
            output.close();
          }
        }
    }
}

69
2018-05-21 20:09



Hier ist ein kleines Beispielprogramm zum Erstellen oder Überschreiben einer Datei. Es ist die lange Version, so dass es leichter verstanden werden kann.

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class writer {
    public void writing() {
        try {
            //Whatever the file path is.
            File statText = new File("E:/Java/Reference/bin/images/statsTest.txt");
            FileOutputStream is = new FileOutputStream(statText);
            OutputStreamWriter osw = new OutputStreamWriter(is);    
            Writer w = new BufferedWriter(osw);
            w.write("POTATO!!!");
            w.close();
        } catch (IOException e) {
            System.err.println("Problem writing to the file statsTest.txt");
        }
    }

    public static void main(String[]args) {
        writer write = new writer();
        write.writing();
    }
}

39
2018-04-09 18:05



Benutzen:

try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("myFile.txt"), StandardCharsets.UTF_8))) {
    writer.write("text to write");
} 
catch (IOException ex) {
    // Handle me
}  

Verwenden try() Schließt den Stream automatisch. Diese Version ist kurz, schnell (gepuffert) und ermöglicht die Wahl der Kodierung.

Diese Funktion wurde in Java 7 eingeführt.


30
2018-04-19 14:35



Eine sehr einfache Möglichkeit zum Erstellen und Schreiben einer Datei in Java:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class CreateFiles {

    public static void main(String[] args) {
        try{
            // Create new file
            String content = "This is the content to write into create file";
            String path="D:\\a\\hi.txt";
            File file = new File(path);

            // If file doesn't exists, then create it
            if (!file.exists()) {
                file.createNewFile();
            }

            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);

            // Write in file
            bw.write(content);

            // Close connection
            bw.close();
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
}

Referenz: Datei erstellen Beispiel in Java


30
2017-11-19 16:07



Hier geben wir eine Zeichenfolge in eine Textdatei ein:

String content = "This is the content to write into a file";
File file = new File("filename.txt");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close(); // Be sure to close BufferedWriter

Wir können leicht eine neue Datei erstellen und Inhalte hinzufügen.


17
2018-06-10 11:55



Wenn Sie eine relativ schmerzfreie Erfahrung haben möchten, können Sie auch einen Blick auf die Apache Commons IO-Paketgenauer gesagt die FileUtils Klasse.

Vergessen Sie nie, die Bibliotheken von Drittanbietern zu überprüfen. Joda-Zeit für Datumsmanipulation, Apache Commons Lang StringUtils für übliche String-Operationen und solche können Ihren Code lesbarer machen.

Java ist eine großartige Sprache, aber die Standardbibliothek ist manchmal ein bisschen Low-Level. Mächtig, aber dennoch niedrig.


15
2018-05-21 20:10



Da der Autor nicht angegeben hat, ob sie eine Lösung für Java - Versionen benötigen (sowohl von Sun als auch von IBM, und dies sind technisch die am weitesten verbreiteten JVMs), und aufgrund der Tatsache, dass die meisten Leute die Antwort zu erhalten scheinen Frage des Autors, bevor es angegeben wurde, dass es a Text (nicht binär)Datei, habe ich mich entschieden, meine Antwort zu geben.


Erstens hat Java 6 im Allgemeinen das Ende seines Lebens erreicht, und da der Autor nicht angegeben hat, dass er Legacy-Kompatibilität benötigt, denke ich, dass es automatisch Java 7 oder höher bedeutet (Java 7 ist noch nicht von IBM freigegeben). So können wir direkt auf das Datei-I / O-Tutorial schauen: https://docs.oracle.com/javase/tutorial/essential/io/legacy.html

Vor der Veröffentlichung von Java SE 7 war die Klasse java.io.File die Klasse   Mechanismus für Datei-I / O verwendet, aber es hatte mehrere Nachteile.

  • Viele Methoden haben keine Ausnahmen ausgelöst, wenn sie fehlgeschlagen sind   unmöglich, eine nützliche Fehlermeldung zu erhalten. Zum Beispiel, wenn eine Datei   Löschen fehlgeschlagen, das Programm würde jedoch einen "delete fail" erhalten   Wüsste nicht, ob es daran lag, dass die Datei nicht existierte, der Benutzer nicht   haben Berechtigungen, oder es gab ein anderes Problem.
  • Die Umbenennungsmethode   funktionierte nicht einheitlich über Plattformen hinweg.
  • Es gab keine echte Unterstützung   für symbolische Links.
  • Mehr Unterstützung für Metadaten wurde gewünscht, wie z   Dateiberechtigungen, Dateieigner und andere Sicherheitsattribute. Zugriff auf   Datei-Metadaten waren ineffizient.
  • Viele der Dateimethoden wurden nicht skaliert.   Das Anfordern eines großen Verzeichniseintrags über einen Server könnte zu einem   aufhängen. Große Verzeichnisse können auch Speicherressourcenprobleme verursachen,   was zu einem Denial of Service führt.
  • Es war nicht möglich zu schreiben   zuverlässiger Code, der einen Dateibaum rekursiv durchlaufen und reagieren kann   wenn kreisförmige symbolische Links vorhanden waren.

Naja, das schließt java.io.File aus. Wenn eine Datei nicht geschrieben / angehängt werden kann, können Sie möglicherweise nicht einmal wissen warum.


Wir können das Tutorial weiter betrachten: https://docs.oracle.com/javase/tutorial/essential/io/file.html#common

Wenn Sie alle Zeilen haben, werden Sie im Voraus an die Textdatei schreiben (anhängen), ist der empfohlene Ansatz https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#write-java.nio.file.Path-java.lang.Iterable-java.nio.charset. Charset-java.nio.file.OpenOption ...-

Hier ist ein Beispiel (vereinfacht):

Path file = ...;
List<String> linesInMemory = ...;
Files.write(file, linesInMemory, StandardCharsets.UTF_8);

Ein anderes Beispiel (append):

Path file = ...;
List<String> linesInMemory = ...;
Files.write(file, linesInMemory, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE);

Wenn Sie Dateiinhalte schreiben möchten, während Sie gehen: https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newBufferedWriter-java.nio.file.Path-java.nio.charset.Charset-java.nio. file.OpenOption ...-

Vereinfachtes Beispiel (Java 8 oder höher):

Path file = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file)) {
    writer.append("Zero header: ").append('0').write("\r\n");
    [...]
}

Ein anderes Beispiel (append):

Path file = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE)) {
    writer.write("----------");
    [...]
}

Diese Methoden erfordern minimalen Aufwand für den Autor und sollten allen anderen beim Schreiben in [Text] -Dateien vorgezogen werden.


11
2018-05-13 04:39



Benutzen:

JFileChooser c = new JFileChooser();
c.showOpenDialog(c);
File writeFile = c.getSelectedFile();
String content = "Input the data here to be written to your file";

try {
    FileWriter fw = new FileWriter(writeFile);
    BufferedWriter bw = new BufferedWriter(fw);
    bw.append(content);
    bw.append("hiiiii");
    bw.close();
    fw.close();
}
catch (Exception exc) {
   System.out.println(exc);
}

9
2017-07-15 14:43