web-dev-qa-db-fra.com

Java Files.write NoSuchFileException

J'essaie d'écrire du texte dans un fichier en utilisant la méthode Files.write().

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

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

Selon l'API, si le fichier n'existe pas, il sera créé puis écrit dans.

Cependant, je reçois ceci:

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)

Suis-je en train de manquer quelque chose?

31
ioreskovic

Vous devriez pouvoir créer un fichier, mais vous ne pouvez pas créer de répertoire. Vous devrez peut-être vérifier le répertoire C:\Users\Administrator\Desktop\work existe en premier.

Tu peux faire

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

Le fichier sera écrit si le paramètre OpenOptions par défaut est utilisé. Si vous spécifiez CREATE, les paramètres par défaut ne seront pas utilisés, mais il sera utilisé uniquement CREATE. Essayez d'ajouter WRITE en plus de CREATE, ou laissez simplement ce paramètre vide

2
DeLac