Невозможно создать файл java.io.IOException: нет такого файла или каталога
Я пытаюсь создать файл в файловой системе, но я получаю это исключение:
java.io.IOException: No such file or directory
У меня есть существующий каталог, и я пытаюсь записать файл в этот каталог.
// 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());
}
Получение исключения:
java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:883)`
У меня есть разрешение на запись в путь, но файл не создан.
Ответы
Ответ 1
Распечатайте полное имя файла или выполните его в отладчике. Когда меня путают такие ошибки, это означает, что мои предположения и ожидания не соответствуют действительности. Убедитесь, что вы видите, что такое путь; это поможет вам понять, где вы поступили неправильно.
Ответ 2
Если каталог ../.foo/bar/
не существует, вы не можете создать там файл, поэтому сначала создайте каталог.
Попробуйте что-то вроде этого:
File f = new File("somedirname1/somedirname2/somefilename");
if (!f.getParentFile().exists())
f.getParentFile().mkdirs();
if (!f.exists())
f.createNewFile();
Ответ 3
Будьте осторожны с разрешениями, вероятно, у вас нет некоторых из них. Вы можете увидеть его в настройках → apps → имя приложения → permissions → active, если нет.
![Permissions app]()
Ответ 4
Попробуйте
f.mkdirs()
, затем createNewFile()
Ответ 5
Вы можете использовать метод Apache Commons IO
FileUtils.openOutputStream(Файл). Он имеет хорошие сообщения об исключении, когда что-то пошло не так, а также создает необходимые родительские директории. Если все было правильно, вы сразу получаете свой OutputStream - очень аккуратный.
Если вы просто хотите touch
сохранить файл, используйте вместо него FileUtils.touch(File)
.
Ответ 6
File.isFile()
false
, если файл/каталог не существует, поэтому вы не можете использовать его для проверки того, пытаетесь ли вы создать каталог. Но это не первый вопрос здесь.
Проблема заключается в том, что промежуточные каталоги не существуют. Вы хотите сначала позвонить f.mkdirs()
.
Ответ 7
У меня такая же проблема при использовании rest-easy. После поиска, когда я понял, что эта ошибка возникла, когда нет места для сохранения временных файлов. Поэтому в tomcat вы можете просто создать папку tomcat-root/temp.
Ответ 8
я исправил свою проблему этим кодом в файловой системе Linux
if (!file.exists())
Files.createFile(file.toPath());