我正在通过入门课程学习Java,使用的教材是Joyce Farrel的Java Programming 9th Edition。例子和练习是为Java 9e编写的,然而,我使用的是Java SE 14。
我已经成功地浏览了Java API,并找到了更新以及有用的解释,说明我在两个版本之间遇到了什么错误,以及什么是进行修正以使示例和练习工作的最佳方法。
然而,在这种情况下,我一直有一个非常困难的时间。我很确定这是因为缺乏经验,但我找不到任何使用Java API可以理解的东西,让我知道如何解决这个问题。Google和Stackoverflow的帖子并没有那么成功,因为我假设人们使用的是更精简的方法或途径。
代码与问题行的注释。
...
Path rafTest = Paths.get("raf.txt");
String addIn = "abc";
byte[] data = addIn.getBytes();
ByteBuffer out = ByteBuffer.wrap(data);
FileChannel fc = null;
try {
fc = (FileChannel)Files.newByteChannel(file, READ, WRITE); // Error READ and Write is ambiguous?
...
} catch (Exception e){
System.out.println("Error message: " + e);
}
...
什么是最好的方法,去寻找一种方法来弄清楚这里到底发生了什么?
... @Bradley: 通过重写我的问题找到了答案。编译器返回3个特定的错误处理StandardOpenOption。利用这一点和Java API,我找到了解决方案。谢谢你。
@NomadMaker。第一个想法是,我没有正确地包含newByteChannel的包。第二个选项是,参数需要一个更具体的引用。
答案:newByteChannel(...);需要打开选项参数引用StandardOpenOption.READ和WRITE。所以说:
...newByteChannel(raf, StandardOpenOption.READ, StandardOpenOption.WRITE)。
这个变化在Java SE 11中实现了。现在程序可以正常工作了。