是否有一种简洁,惯用的方式(可能使用Apache Commons)来指定OpenOption的常见组合,如StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING
答案 0 :(得分:30)
这些都是您的轻松可能。
静态导入,以提高可读性:
import static java.nio.file.StandardOpenOption.CREATE_NEW;
import static java.nio.file.StandardOpenOption.WRITE;
OpenOption[] options = new OpenOption[] { WRITE, CREATE_NEW };
使用默认值:
//no Options anyway
Files.newBufferedReader(path, cs)
//default: CREATE, TRUNCATE_EXISTING, and WRITE not allowed: READ
Files.newBufferedWriter(path, cs, options)
//default: READ not allowed: WRITE
Files.newInputStream(path, options)
//default: CREATE, TRUNCATE_EXISTING, and WRITE not allowed: READ
Files.newOutputStream(path, options)
//default: READ do whatever you want
Files.newByteChannel(path, options)
最后,可以指定这样的选项集:
Files.newByteChannel(path, EnumSet.of(CREATE_NEW, WRITE));
答案 1 :(得分:6)
我能提供的最佳建议是欺骗T ...和T []的等价性,其中一个其他stackoverflow讨论说应该有效
Can I pass an array as arguments to a method with variable arguments in Java?
因此...
OpenOption myOptions[] = {StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING};
OutputStream foo=OutputStream.newOutputStream(myPath,myOptions);
警告:未经测试。
答案 2 :(得分:1)
java.nio.file.Files
有5种方法,带有OpenOption
varargs参数:
Files
.newBufferedWriter(...)
.write(...)
.newOutputStream(...)
.newInputStream(...)
.newByteChannel(...)
他们直接不限制任何OpenOption
组合,但所有这些组合都会在java.nio.file.spi.FileSystemProvider
调用这三种方法中的一些:
FileSystemProvider
.newInputStream(Path, OpenOption...)
.newOutputStream(Path, OpenOption...)
.newByteChannel(Path, Set<? extends OpenOption>, FileAttribute<?>...)
FileSystemProvider.newInputStream(...)
由Files.newInputStream(...)
FileSystemProvider.newOutputStream(...)
被称为:
Files
.newBufferedWriter(...)
.newOutputStream(...)
.write(...)
抽象FileSystemProvider.newByteChannel(...)
由:
Files.newByteChannel(...)
FileSystemProvider.newInputStream(...)
FileSystemProvider.newOutputStream(...)
OptenOption
组合限制:
抽象 FileSystemProvider.newByteChannel(...)
方法具有平台相关的实现,可以扩展OpenOption
组合限制(如sun.nio.fs.WindowsFileSystemProvider
中所述)。
使用OpenOption
vargars的所有Files方法在抽象FileSystemProvider.newByteChannel(...)
中结束,该实现与平台相关。因此,Files方法中的OpenOption
组合限制与平台有关。