StandardOpenOption问题java

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.*

而不是import 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);