it-swarm.com.de

Java FileOutputStream Datei erstellen, falls nicht vorhanden

Gibt es eine Möglichkeit, FileOutputStream so zu verwenden, dass eine Datei (String-Dateiname) nicht vorhanden ist, wird sie erstellt.

FileOutputStream oFile = new FileOutputStream("score.txt", false);
148
Stefan Dunn

Wenn die Datei nicht vorhanden ist und nicht erstellt werden kann ( doc ), wird ein FileNotFoundException ausgegeben. Sie wird jedoch erstellt, wenn dies möglich ist. Um sicher zu sein, sollten Sie wahrscheinlich zuerst testen, ob die Datei existiert, bevor Sie FileOutputStream erstellen (und mit createNewFile() erstellen, falls 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); 
244
talnicolas

Vor dem Erstellen einer Datei müssen alle Verzeichnisse des übergeordneten Objekts erstellt werden.

Verwenden Sie yourFile.getParentFile().mkdirs()

28

Sie können eine leere Datei erstellen, ob sie existiert oder nicht ...

new FileOutputStream("score.txt", false).close();

wenn Sie die Datei verlassen möchten, falls sie existiert ...

new FileOutputStream("score.txt", true).close();

Sie erhalten eine FileNotFoundException nur, wenn Sie versuchen, die Datei in einem Verzeichnis zu erstellen, das nicht vorhanden ist. 

21
Peter Lawrey
File f = new File("Test.txt");
if(!f.exists()){
  f.createNewFile();
}else{
  System.out.println("File already exists");
}

Übergeben Sie diese f an Ihren FileOutputStream-Konstruktor.

20
Shashank Kadne

FileUtils von Apache Commons ist eine ziemlich gute Möglichkeit, dies in einer einzigen Zeile zu erreichen.

FileOutputStream s = FileUtils.openOutputStream(new File("/home/nikhil/somedir/file.txt"))

Dadurch werden übergeordnete Ordner erstellt, wenn keine vorhanden sind, und eine Datei, falls nicht vorhanden, und eine Ausnahme ausgelöst, wenn das Dateiobjekt ein Verzeichnis ist oder in das nicht geschrieben werden kann. Dies ist äquivalent zu:

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 die Vorgänge nicht ausführen darf.

12
Nikhil Sahu

Datei erstellen, falls nicht vorhanden Wenn eine Datei vorhanden ist, 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();
    }
}
2
foobarfuu

Geben Sie einfach eine alternative Methode zum Erstellen der Datei an, wenn Pfad und Dateien nicht vorhanden sind.

Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
    Files.createFile(path);
Files.write(path, ("").getBytes());
0
Manish Bansal

new FileOutputStream(f) erstellt in den meisten Fällen eine Datei, aber leider erhalten Sie eine FileNotFoundException 

wenn die Datei vorhanden ist, jedoch ein Verzeichnis und keine reguläre Datei ist, existiert sie nicht, kann jedoch nicht erstellt oder aus einem anderen Grund nicht geöffnet werden

von Javadoc

In anderen Wörtern kann es viele Fälle geben, in denen Sie FileNotFoundException mit "Konnte Ihre Datei nicht erstellen" erhalten, aber Sie könnten den Grund nicht finden, warum die Dateierstellung fehlgeschlagen ist.

Eine Lösung besteht darin, alle Aufrufe der Datei-API zu entfernen und stattdessen die Datei-API zu verwenden, da dies eine wesentlich bessere Fehlerbehandlung ermöglicht. Ersetzen Sie normalerweise 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 verwenden, z. B. Datei), ist die Verwendung von Files.createFile(p) eine gute Möglichkeit, um sicherzustellen, dass Ihre Datei ordnungsgemäß erstellt wird, und wenn nicht, wissen Sie, warum sie nicht funktioniert . Einige Leute haben oben gesagt, dass dies überflüssig ist. Es stimmt, aber Sie erhalten eine bessere Fehlerbehandlung, die in einigen Fällen erforderlich sein kann.

0
stackoverflowed

Sie können möglicherweise eine FileNotFoundException erhalten, wenn die Datei nicht vorhanden ist.

Java-Dokumentation sagt:

Ob eine Datei verfügbar ist oder erstellt werden kann, hängt von der .__ ab. zugrunde liegende Plattform http://docs.Oracle.com/javase/7/docs/api/Java/io/FileOutputStream.html

Wenn Sie Java 7 verwenden, können Sie das Java.nio-Paket verwenden:

Der Parameter options gibt an, wie die Datei erstellt oder geöffnet wird. Sie ö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

0
sikander