web-dev-qa-db-ja.com

Java Files.write NoSuchFileException

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)

何か不足していますか?

31
ioreskovic

ファイルを作成できるはずですが、ディレクトリを作成することはできません。ディレクトリを確認する必要があるかもしれませんC:\Users\Administrator\Desktop\workが最初に存在します。

できるよ

Path parentDir = project.getFilePath().getParent();
if (!Files.exists(parentDir))
    Files.createDirectories(parentDir);
48
Peter Lawrey

デフォルトのOpenOptionsパラメーターが使用される場合、ファイルは書き込まれます。 CREATEを指定すると、デフォルトのパラメーターは使用されませんが、CREATEのみが使用されます。 CREATEに加えてWRITEを追加するか、そのパラメーターを空のままにしてください

2
DeLac