Не удается сделать файл 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();

будьте осторожны с разрешениями, вероятно, у вас нет некоторых из них. Вы можете увидеть его в настройках - > приложения - > имя приложения - > разрешения - > активный, если нет.

Permissions app


попробовать

f.mkdirs() затем 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());