0

"Java Files.write вызывает NoSuchFileException: как решить проблему?"

12

Я пытаюсь записать текст в файл с помощью метода Files.write().

Код выглядит следующим образом:

byte[] contents = project.getCode().getBytes(StandardCharsets.UTF_8);

try {
    Files.write(project.getFilePath(), contents, StandardOpenOption.CREATE);
} catch (IOException ex) {
    ex.printStackTrace();
    return;
}

Согласно документации API, если файл не существует, он должен быть создан, а затем в него записано.

Однако я получаю следующую ошибку:

java.nio.file.NoSuchFileException: C:\Users\Administrator\Desktop\work\Default.txt
    at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
    at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(Unknown Source)
    at java.nio.file.spi.FileSystemProvider.newOutputStream(Unknown Source)
    at java.nio.file.Files.newOutputStream(Unknown Source)
    at java.nio.file.Files.write(Unknown Source)

Неужели я что-то упустил?

2 ответ(ов)

0

Вы должны иметь возможность создать файл, но не можете создать директорию. Вам следует сначала убедиться, что директория C:\Users\Administrator\Desktop\work существует.

Вы можете сделать это следующим образом:

Path parentDir = project.getFilePath().getParent();
if (!Files.exists(parentDir)) {
    Files.createDirectories(parentDir);
}

Этот код проверяет, существует ли родительская директория для файла, и если нет, создаёт все недостающие директории в пути. Убедитесь, что у вас есть необходимые права доступа для выполнения этих операций.

0

Файл будет записан, если используется параметр OpenOptions по умолчанию. Если вы укажете только CREATE, параметры по умолчанию не будут применены. Попробуйте добавить WRITE в дополнение к CREATE, или просто оставьте этот параметр пустым.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь