Java。当使用FileChannel和ByteChannel时,READ和WRITE是 "模棱两可 "的?

问题描述 投票:-1回答:1

我正在通过入门课程学习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);
}
...

什么是最好的方法,去寻找一种方法来弄清楚这里到底发生了什么?

java ambiguous filechannel
1个回答
2
投票

... @Bradley: 通过重写我的问题找到了答案。编译器返回3个特定的错误处理StandardOpenOption。利用这一点和Java API,我找到了解决方案。谢谢你。

@NomadMaker。第一个想法是,我没有正确地包含newByteChannel的包。第二个选项是,参数需要一个更具体的引用。

答案:newByteChannel(...);需要打开选项参数引用StandardOpenOption.READ和WRITE。所以说:

...newByteChannel(raf, StandardOpenOption.READ, StandardOpenOption.WRITE)。

这个变化在Java SE 11中实现了。现在程序可以正常工作了。

© www.soinside.com 2019 - 2024. All rights reserved.