java nio Files.write()方法不起作用

时间:2013-11-15 21:41:20

标签: java parameter-passing

好的,所以我正在尝试在Java中使用新的Files.write方法。 Here is a link

它说StandardOpenOption是可选的,但是每次我把它留空,即使我把东西放在那里我也会遇到编译器错误。例如......

try{
 Files.write("example.txt",byte[] byteArray);
 }
  catch(Exception e){}

将导致文件类型中的方法write(Path,byte [],OpenOption ...)不适用于参数(Path,String)

2 个答案:

答案 0 :(得分:3)

这与NIO无关,与语言语法有关。你有:

Files.write("example.txt",byte[] byteArray);

我不知道你的意图是什么,但你不能在那样的函数参数列表中声明一个变量。你的意思可能是:

byte[] byteArray = ...; // populate with data to write.
Files.write("example.txt", byteArray);

要获得更正式的观点,请从JLS 15.12开始浏览JLS。语言中最终没有ArgumentList模式可以接受LocalVariableDeclarationStatement

答案 1 :(得分:3)

如果我将其更改为

try{
    Files.write("example.txt", new byte[0]);
 } catch(Exception e){} 

我看到了

  

找不到合适的写入方法(String,byte [])
  Files.write(“example.txt”,new byte [0]);
  ^ method Files.write(Path,Iterable,Charset,OpenOption ...)不适用(实际参数String不能通过方法调用转换为Path   转换)
  方法Files.write(Path,byte [],OpenOption ...)不适用(实际参数String不能通过方法调用转换转换为Path)
  1错误

如果我改为

 Path path = FileSystems.getDefault().getPath("logs", "access.log");
 try{
     byte[] byteArray = ...; // populate with data to write.
     Files.write(path, byteArray);
 } catch(Exception e){} 

然后我没有编译器警告。

所以,你需要:

  1. 将String参数更改为Path参数
  2. 使用字节数组变量“byteArray”而不是“byte [] byteArray”,因为后者是输入参数签名。