web-dev-qa-db-ger.com

Wie schreibe ich eine Textdatei Java?

Mit dem folgenden Code wird keine Datei erstellt (ich kann die Datei nirgendwo sehen). Was fehlt?

try {
    //create a temporary file
    String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(
        Calendar.getInstance().getTime());
    File logFile=new File(timeLog);

    BufferedWriter writer = new BufferedWriter(new FileWriter(logFile));
    writer.write (string);

    //Close writer
    writer.close();
} catch(Exception e) {
    e.printStackTrace();
}
59
William Falcon

Ich denke, deine Erwartungen und die Realität stimmen nicht überein (aber wann auch immer;))

Grundsätzlich, wo Sie denken, dass die Datei geschrieben wurde und wo die Datei tatsächlich geschrieben wird, sind nicht gleich (hmmm, vielleicht sollte ich eine if-Anweisung schreiben;))

public class TestWriteFile {

    public static void main(String[] args) {
        BufferedWriter writer = null;
        try {
            //create a temporary file
            String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
            File logFile = new File(timeLog);

            // This will output the full path where the file will be written to...
            System.out.println(logFile.getCanonicalPath());

            writer = new BufferedWriter(new FileWriter(logFile));
            writer.write("Hello world!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the writer regardless of what happens...
                writer.close();
            } catch (Exception e) {
            }
        }
    }
}

Beachten Sie auch, dass Ihr Beispiel alle vorhandenen Dateien überschreibt. Wenn Sie den Text an die Datei anhängen möchten, sollten Sie stattdessen Folgendes tun:

writer = new BufferedWriter(new FileWriter(logFile, true));
114
MadProgrammer

Ich möchte MadProgrammer's Answer etwas mehr hinzufügen.

Bei mehrzeiligem Schreiben beim Ausführen des Befehls 

writer.write(string);

man kann feststellen, dass die Zeilenvorschubzeichen in der geschriebenen Datei ausgelassen oder übersprungen werden, auch wenn sie während des Debugging erscheinen oder wenn derselbe Text mit

System.out.println("\n");

Daher ist der gesamte Text ein großer Textblock, der in den meisten Fällen unerwünscht ist .. Das Zeichen für den Zeilenumbruch kann von der Plattform abhängig sein

String newline = System.getProperty("line.separator");

und dann die Newline-Variable anstelle von "\ n" verwenden. Dadurch erhalten Sie die Ausgabe in der gewünschten Weise.

16
Menezes Sousa

In Java 7 geht das jetzt

try(BufferedWriter w = ....)
{
  w.write(...);
}
catch(IOException)
{
}

und w.close wird automatisch ausgeführt

14
guest

Es wird keine Datei erstellt, weil Sie die Datei nie erstellt haben. Du hast ein Objekt dafür gemacht. Beim Erstellen einer Instanz wird die Datei nicht erstellt.

File newFile = new File("directory", "fileName.txt");

Sie können dies tun, um eine Datei zu erstellen:

newFile.createNewFile();

Sie können dies tun, um einen Ordner zu erstellen:

newFile.mkdir();
4
smorce

Es funktioniert bei mir. Stellen Sie sicher, dass Sie neben "timeLog" ".txt" anhängen. Ich habe es in einem einfachen Programm verwendet, das mit Netbeans geöffnet wurde, und es schreibt das Programm in den Hauptordner (wo sich Builder- und SRC-Ordner befinden).

0
Giulio Dalicco

Verwenden Sie Java 8 LocalDateTime und die Java-Try-with-Anweisung:

public class WriteFile {

    public static void main(String[] args) {

        String timeLog = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss").format(LocalDateTime.now());
        File logFile = new File(timeLog);

        try (BufferedWriter bw = new BufferedWriter(new FileWriter(logFile))) 
        {
            System.out.println("File was written to: "  + logFile.getCanonicalPath());
            bw.write("Hello world!");
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}
0
xtra

Sie können eine Java-Bibliothek ausprobieren. FileUtils , Es hat viele Funktionen, die in Dateien schreiben. 

0
Snow