2013-01-10 48 views
23

我正在尝试使用Files.write()方法将一些文本写入文件。Java Files.write NoSuchFileException

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) 

我这么想吗?

+7

是否存在目录'C:\ Users \ Administrator \ Desktop \ work'? (为什么你作为管理员开发?) – fge

+5

文件夹是否丢失? –

+1

使用file.getParentFile()。mkdirs(); –

回答

35

你应该可以创建一个文件,但是你不能创建一个目录。您可能需要先检查目录C:\Users\Administrator\Desktop\work

你可以做,如果使用默认参数OpenOptions

Path parentDir = project.getFilePath().getParent(); 
if (!Files.exists(parentDir)) 
    Files.createDirectories(parentDir); 
+1

为什么检查是否已经存在? –

+0

@ AlikElzin-kilaka如果你不这样做,你可以得到'FileAlreadyExistsException' –

+1

如果使用'getParent()','FileAlreadyExistsException'永远不会被抛出。父始终是一个目录。从文档:“FileAlreadyExistsException - 如果目录存在但不是目录” –

1

文件将被写入。如果您指定CREATE,则不会使用默认参数,但它仅用于CREATE。尝试添加写入除了CREATE,或只是保留该参数为空

+4

错误。无论给出什么选项,Files.write都会添加“WRITE”。请参阅'java.nio.file.spi.FileSystemProvider.newOutputStream'源文件 – lyomi

+1

它为我工作!对不起,给你一个减号。 – Desik

相关问题