Не удается сделать файл java.Ио.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)`
у меня есть разрешение на запись в путь, но файл не создается.
8 ответов
распечатайте полное имя файла или выполните шаг в отладчике. Когда я запутываюсь в таких ошибках, это означает, что мои предположения и ожидания не соответствуют реальности. Убедитесь, что вы можете посмотреть что такое путь; это поможет вам понять, где вы ошиблись.
Если каталог ../.foo/bar/
не существует, вы не можете создать файл там, поэтому убедитесь, что вы сначала создаете каталог.
попробуйте что-то вроде этого:
File f = new File("somedirname1/somedirname2/somefilename");
if (!f.getParentFile().exists())
f.getParentFile().mkdirs();
if (!f.exists())
f.createNewFile();
будьте осторожны с разрешениями, вероятно, у вас нет некоторых из них. Вы можете увидеть его в настройках - > приложения - > имя приложения - > разрешения - > активный, если нет.
вы можете использовать Apache Commons IO
' s пакета fileutils.openOutputStream(файл) метод. Он имеет хорошие сообщения об исключениях, когда что-то пошло не так, а также создает необходимые родительские каталоги. Если все было правильно, вы сразу получаете свой OutputStream-очень аккуратно.
Если вы просто хотите файл FileUtils.touch(File)
вместо.
File.isFile()
is false
если файл / каталог не существует, поэтому вы не можете использовать его для проверки того, пытаетесь ли вы создать каталог. Но это не первый вопрос.
проблема в том, что промежуточные каталоги не существуют. Вы хотите позвонить f.mkdirs()
первый.
У меня такая же проблема при использовании rest-easy. После поиска, пока я понял, что эта ошибка произошла, когда нет места сохранить временные файлы. Поэтому в tomcat вы можете просто создать tomcat-root / temp.
я исправил свою проблему с помощью этого кода в файловой системе linux
if (!file.exists())
Files.createFile(file.toPath());