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();
}
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));
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.
In Java 7 geht das jetzt
try(BufferedWriter w = ....)
{
w.write(...);
}
catch(IOException)
{
}
und w.close wird automatisch ausgeführt
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();
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).
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();
}
}
}
Sie können eine Java-Bibliothek ausprobieren. FileUtils , Es hat viele Funktionen, die in Dateien schreiben.