54

I'm trying to write some text to a file using Files.write() method.

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

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

According to the API, if the file doesn't exist, it will be created and then written to.

However, I get this:

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)

Am I missing something?

tshepang
  • 12,111
  • 21
  • 91
  • 136
ioreskovic
  • 5,531
  • 5
  • 39
  • 70

2 Answers2

72

You should be able to create a file, but you can't create a directory. You may need to check the directory C:\Users\Administrator\Desktop\work exists first.

You can do

Path parentDir = project.getFilePath().getParent();
if (!Files.exists(parentDir))
    Files.createDirectories(parentDir);
Peter Lawrey
  • 525,659
  • 79
  • 751
  • 1,130
2

The file will be written if default OpenOptions parameter is used. If you specify CREATE, default parameters will not be used, but it is used just CREATE. Try to add WRITE in addition to CREATE, or just leave that parameter empty

DeLac
  • 1,068
  • 13
  • 43
  • 5
    wrong. `Files.write` will add `WRITE` regardless of any options given. see `java.nio.file.spi.FileSystemProvider.newOutputStream` source – lyomi Oct 02 '13 at 06:59