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éé.
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é.
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();
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.
Essayer avec
f.mkdirs()
then createNewFile()
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)
.
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.
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.
j'ai corrigé mon problème avec ce code sur le système de fichiers linux
if (!file.exists())
Files.createFile(file.toPath());