web-dev-qa-db-fra.com

Impossible de créer le fichier Java.io.IOException: aucun fichier ou répertoire de ce type

J'essaie de créer un fichier sur le système de fichiers, mais je continue à avoir cette exception:

Java.io.IOException: No such file or directory

J'ai un répertoire existant et j'essaye d'écrire un fichier dans ce répertoire.

// 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());
}

Obtenir une exception:

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

J'ai l'autorisation d'écriture sur le chemin, mais le fichier n'est pas créé.

20
Shervin Asgari

Imprimez le nom de fichier complet ou passez en revue dans un débogueur. Lorsque des erreurs comme celle-ci m'embrouillent, cela signifie que mes hypothèses et mes attentes ne correspondent pas à la réalité. Assurez-vous que vous pouvez voir quel est le chemin; cela vous aidera à comprendre où vous vous êtes trompé.

20
duffymo

Si le répertoire ../.foo/bar/ n'existe pas, vous ne pouvez pas créer de fichier à cet endroit. Assurez-vous donc de créer le répertoire en premier.

Essayez quelque chose comme ça:

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

Soyez prudent avec les autorisations, c'est probablement que vous n'en avez pas. Vous pouvez le voir dans les paramètres -> applications -> nom de l'application -> autorisations -> actif sinon.

Permissions app

Essayer avec 

f.mkdirs() then createNewFile()

2
Jigar Joshi

Vous souhaiterez peut-être utiliser la méthode Apache Commons IO ' FileUtils.openOutputStream (File) . Il a de bons messages d'exception quand quelque chose s'est mal passé et crée également les répertoires parent nécessaires. Si tout va bien, vous obtenez directement votre OutputStream - très soigné.

Si vous voulez simplement touch le fichier, utilisez plutôt FileUtils.touch(File).

2
Fabian Barney

J'ai eu le même problème en utilisant repos-facile. Après avoir cherché alors que je pensais que cette erreur se produisait alors qu’il n’y avait pas de place pour conserver les fichiers temporaires . Donc, dans Tomcat, vous pouvez simplement créer Tomcat-root/temp folder.

1
Chinthaka Dinadasa

File.isFile() est false si le fichier/répertoire n'existe pas, vous ne pouvez donc pas l'utiliser pour tester si vous essayez de créer un répertoire. Mais ce n'est pas le premier problème ici.

Le problème est que les répertoires intermédiaires n'existent pas. Vous voulez appeler f.mkdirs() en premier.

1
Sean Owen

j'ai corrigé mon problème avec ce code sur le système de fichiers linux

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