StandardOpenOption issue java
本问题已经有最佳答案,请猛点这里访问。
我有这个简单的Java代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import java.nio.file.*; import java.io.*; public class Write { public static final String PATH ="/home/user/Desktop/hello.txt"; public static void main(String[] argv) { Path path = Paths.get(PATH); OutputStream out; try { out = Files.newOutputStream(path, CREATE, APPEND); } catch (IOException e) { System.out.println("Caught IOException:"+e.getMessage()); } } } |
由于此错误无法编译:
1 2 3 4 5 6 7 8 9 10 11 | Write.java:14: error: cannot find symbol out = Files.newOutputStream(path, CREATE, APPEND); ^ symbol: variable CREATE location: class Write Write.java:14: error: cannot find symbol out = Files.newOutputStream(path, CREATE, APPEND); ^ symbol: variable APPEND location: class Write 2 errors |
通常这意味着我忘了进口一些东西。我甚至试图补充:
1 | import java.nio.file.StandardOpenOption |
但我也有同样的错误。
编辑:好的,我已经按照@rmlan的建议解决了我的问题。我确实错过了那些常量。谢谢。
更改导入源:
1 | import java.nio.file.StandardOpenOption |
到
1 | import static java.nio.file.StandardOpenOption.* |
为了引用StandardOpenOption类中的枚举常量(无需任何限定):
1 | Files.newOutputStream(path, CREATE, APPEND); |
必须静态地从该类导入所有枚举常量(或者至少静态地导入正在使用的特定枚举常量)。
或者,正如前面提到的其他答案,您可以保留添加的导入,但在这种情况下,您必须完全限定对StandardOpenOption的枚举常量的引用:
1 | Files.newOutputStream(path, StandardOpenOption.CREATE, StandardOpenOption.APPEND); |
用这个
1 2 | import static java.nio.file.StandardOpenOption.CREATE; import static java.nio.file.StandardOpenOption.APPEND; |
或
1 | import static java.nio.file.StandardOpenOption.* |
而不是
这些是静态成员,您必须预先准备他们所在的类
1 | StandardOpenOption.APPEND |
或者执行静态导入
1 | import static java.nio.file.StandardOpenOption.APPEND; |
您要么将导入设置为静态
1 | import static java.nio.file.StandardOpenOption.*; |
或者使用StandardOpenOptions中的静态引用
1 2 3 | import java.nio.file.StandardOpenOption; Files.newOutputStream(path, StandardOpenOption.CREATE, StandardOpenOption.APPEND); |