Подтвердить что ты не робот

Невозможно создать файл 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)`

У меня есть разрешение на запись в путь, но файл не создан.

4b9b3361

Ответ 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());