Gibt es eine Möglichkeit, FileOutputStream so zu verwenden, dass eine Datei (String-Dateiname) erstellt wird, wenn sie nicht vorhanden ist?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
Gibt es eine Möglichkeit, FileOutputStream so zu verwenden, dass eine Datei (String-Dateiname) erstellt wird, wenn sie nicht vorhanden ist?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
Antworten:
Es wird ein ausgelöst, FileNotFoundException
wenn die Datei nicht vorhanden ist und nicht erstellt werden kann ( doc ), aber es wird erstellt, wenn dies möglich ist. Um sicherzugehen, sollten Sie wahrscheinlich zuerst testen, ob die Datei vorhanden ist, bevor Sie die erstellen FileOutputStream
(und mit erstellen, createNewFile()
wenn dies nicht der Fall ist):
File yourFile = new File("score.txt");
yourFile.createNewFile(); // if file already exists will do nothing
FileOutputStream oFile = new FileOutputStream(yourFile, false);
createNewFile()
Methode, wie in meinem Beispiel gezeigt.
createNewFile()
ist hier reine Zeitverschwendung. Das System wird das bereits tun. Sie zwingen es nur, zweimal hinzuschauen.
Vor dem Erstellen einer Datei müssen alle Verzeichnisse der Eltern erstellt werden.
Verwenden yourFile.getParentFile().mkdirs()
Sie können eine leere Datei erstellen, unabhängig davon, ob sie vorhanden ist oder nicht ...
new FileOutputStream("score.txt", false).close();
Wenn Sie die Datei verlassen möchten, falls vorhanden ...
new FileOutputStream("score.txt", true).close();
Sie erhalten nur dann eine FileNotFoundException, wenn Sie versuchen, die Datei in einem nicht vorhandenen Verzeichnis zu erstellen.
FileNotFoundException
in beiden Fällen.
File f = new File("Test.txt");
if(!f.exists()){
f.createNewFile();
}else{
System.out.println("File already exists");
}
Geben Sie dies f
an Ihren FileOutputStream
Konstruktor weiter.
FileUtils von Apache Commons ist ein ziemlich guter Weg, um dies in einer einzigen Zeile zu erreichen.
FileOutputStream s = FileUtils.openOutputStream(new File("/home/nikhil/somedir/file.txt"))
Dadurch werden übergeordnete Ordner erstellt, wenn sie nicht vorhanden sind, und eine Datei erstellt, wenn sie nicht vorhanden ist, und eine Ausnahme ausgelöst, wenn das Dateiobjekt ein Verzeichnis ist oder nicht beschrieben werden kann. Dies entspricht :
File file = new File("/home/nikhil/somedir/file.txt");
file.getParentFile().mkdirs(); // Will create parent directories if not exists
file.createNewFile();
FileOutputStream s = new FileOutputStream(file,false);
Alle oben genannten Vorgänge lösen eine Ausnahme aus, wenn der aktuelle Benutzer den Vorgang nicht ausführen darf.
Datei erstellen, falls nicht vorhanden. Wenn die Datei beendet wird, löschen Sie ihren Inhalt:
/**
* Create file if not exist.
*
* @param path For example: "D:\foo.xml"
*/
public static void createFile(String path) {
try {
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
} else {
FileOutputStream writer = new FileOutputStream(path);
writer.write(("").getBytes());
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Geben Sie nur eine alternative Möglichkeit zum Erstellen der Datei an, wenn diese nicht mithilfe von Pfad und Dateien vorhanden ist.
Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
Files.createFile(path);
Files.write(path, ("").getBytes());
Sie können möglicherweise eine erhalten, FileNotFoundException
wenn die Datei nicht vorhanden ist.
In der Java-Dokumentation heißt es:
Ob eine Datei verfügbar ist oder erstellt werden kann, hängt von der zugrunde liegenden Plattform http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html ab
Wenn Sie Java 7 verwenden, können Sie das Paket java.nio verwenden:
Der Parameter options gibt an, wie die Datei erstellt oder geöffnet wird. Er öffnet die Datei zum Schreiben und erstellt die Datei, falls sie nicht vorhanden ist.
http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
new FileOutputStream(f)
In den meisten Fällen wird eine Datei erstellt, aber leider erhalten Sie eine FileNotFoundException
Wenn die Datei vorhanden ist, aber kein Verzeichnis, sondern ein Verzeichnis ist, nicht vorhanden ist, aber nicht erstellt oder aus einem anderen Grund nicht geöffnet werden kann
Mit anderen Worten, es könnte viele Fälle geben, in denen Sie FileNotFoundException erhalten, was bedeutet, dass Ihre Datei nicht erstellt werden konnte, aber Sie konnten den Grund für das Fehlschlagen der Dateierstellung nicht finden.
Eine Lösung besteht darin, jeden Aufruf der Datei-API zu entfernen und stattdessen die Datei-API zu verwenden, da diese eine viel bessere Fehlerbehandlung bietet. Ersetzen Sie normalerweise alle new FileOutputStream(f)
durch Files.newOutputStream(p)
.
In Fällen, in denen Sie die Datei-API verwenden müssen (weil Sie beispielsweise eine externe Schnittstelle mit Datei verwenden), ist die Verwendung Files.createFile(p)
eine gute Möglichkeit, um sicherzustellen, dass Ihre Datei ordnungsgemäß erstellt wurde, und wenn nicht, wissen Sie, warum sie nicht funktioniert hat. Einige Leute haben oben kommentiert, dass dies überflüssig ist. Es ist wahr, aber Sie erhalten eine bessere Fehlerbehandlung, die in einigen Fällen erforderlich sein kann.