webentwicklung-frage-antwort-db.com.de

Datei Java.io.IOException kann nicht erstellt werden: Keine Datei oder Verzeichnis

Ich versuche, eine Datei im Dateisystem zu erstellen, aber ich bekomme immer wieder diese Ausnahme:

Java.io.IOException: No such file or directory

Ich habe ein vorhandenes Verzeichnis, und ich versuche, eine Datei in dieses Verzeichnis zu schreiben.

// I have also tried this below, but get same error
// new File(System.getProperty("user.home") + "/.foo/bar/" + fileName);

File f = new File(System.getProperty("user.home") + "/.foo/bar/", fileName);

if (f.exists() && !f.canWrite())
        throw new IOException("Kan ikke skrive til filsystemet " + f.getAbsolutePath());

if (!f.isFile()) {
    f.createNewFile(); // Exception here
} else {
    f.setLastModified(System.currentTimeMillis());
}

Ausnahme bekommen:

Java.io.IOException: No such file or directory
  at Java.io.UnixFileSystem.createFileExclusively(Native Method)
  at Java.io.File.createNewFile(File.Java:883)`

Ich habe Schreibberechtigung für den Pfad, die Datei wird jedoch nicht erstellt.

20
Shervin Asgari

Drucken Sie den vollständigen Dateinamen aus, oder gehen Sie in einem Debugger schrittweise vor. Wenn ich durch solche Fehler verwirrt werde, bedeutet dies, dass meine Annahmen und Erwartungen nicht der Realität entsprechen. Stellen Sie sicher, dass Sie sehen was der Pfad ist; Es wird Ihnen helfen herauszufinden, wo Sie falsch gelaufen sind.

20
duffymo

Wenn das Verzeichnis ../.foo/bar/ nicht vorhanden ist, können Sie dort keine Datei erstellen. Stellen Sie daher sicher, dass Sie das Verzeichnis zuerst erstellen.

Versuchen Sie etwas so:

File f = new File("somedirname1/somedirname2/somefilename");
if (!f.getParentFile().exists())
    f.getParentFile().mkdirs();
if (!f.exists())
    f.createNewFile();
37
Bohemian

Seien Sie vorsichtig mit Berechtigungen, wahrscheinlich haben Sie nicht einige davon. Sie können es in Einstellungen -> Apps -> Name der Anwendung -> Berechtigungen -> Aktiv sehen, falls nicht.

Permissions app

Versuche es mit 

f.mkdirs() dann createNewFile()

2
Jigar Joshi

Möglicherweise möchten Sie die Apache Commons IOs FileUtils.openOutputStream (File) -Methode verwenden. Es gibt gute Ausnahmemeldungen, wenn etwas schiefgelaufen ist, und erstellt auch die übergeordneten Verzeichnisse. Wenn alles stimmt, erhalten Sie direkt Ihren OutputStream - sehr ordentlich.

Wenn Sie nur die Variable touch möchten, verwenden Sie stattdessen FileUtils.touch(File).

2
Fabian Barney

Ich habe das gleiche Problem bei der Verwendung von Rest-Easy. Nach der Suche stellte sich heraus, dass dieser Fehler aufgetreten ist, wenn temporäre Dateien nicht gespeichert werden können. In Tomcat können Sie also einfach den Ordner Tomcat-root/temp erstellen.

1

File.isFile() ist false, wenn die Datei/das Verzeichnis nicht vorhanden ist. Sie können damit nicht testen, ob Sie ein Verzeichnis erstellen möchten. Aber das ist nicht das erste Thema hier.

Das Problem ist, dass die Zwischenverzeichnisse nicht existieren. Sie möchten zuerst f.mkdirs() aufrufen.

1
Sean Owen

ich habe mein Problem durch diesen Code im Linux-Dateisystem behoben

if (!file.exists())
    Files.createFile(file.toPath());
0
AhmadReza