Java 使用常用OpenOption组合的最快方法
是否有一种简洁、惯用的方法(可能使用Apache Commons)来指定OpenOption的常见组合,如Java 使用常用OpenOption组合的最快方法,java,nio,nio2,Java,Nio,Nio2,是否有一种简洁、惯用的方法(可能使用Apache Commons)来指定OpenOption的常见组合,如StandardOpenOption.WRITE、StandardOpenOption.CREATE、StandardOpenOption.TRUNCATE\u现有的我能提供的最佳建议是欺骗与。。。和T[],其他stackoverflow讨论中的哪一个说应该有效 所以 警告:未经测试。这些是您拥有的简单可能性 静态导入,以提高可读性: import static java.nio.file
StandardOpenOption.WRITE、StandardOpenOption.CREATE、StandardOpenOption.TRUNCATE\u现有的我能提供的最佳建议是欺骗与。。。和T[],其他stackoverflow讨论中的哪一个说应该有效
所以
警告:未经测试。这些是您拥有的简单可能性
静态导入,以提高可读性:
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));
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.newByteChannel(…)
由以下人员调用:
Files.newbytechnel(…)
FileSystemProvider.newInputStream(…)
FileSystemProvider.newOutputStream(…)
OptenOption
组合限制:
- FileSystemProvider.newInputStream(…)
- UnsupportedOperationException:写入| |追加
- FileSystemProvider.newOutputStream(…)
- 隐式地:写
- IllegalArgumentException:读取
- 默认值(如果没有选项):创建并截断现有的
abstractFileSystemProvider.newByteChannel(…)
方法有一个依赖于平台的实现,它可以扩展OpenOption
组合限制(如sun.nio.fs.WindowsFileSystemProvider
)
在引擎盖下使用OpenOption
vargars的所有文件方法以抽象FileSystemProvider.newByteChannel(…)
结尾,该实现依赖于平台。因此,文件方法中的OpenOption
组合限制取决于平台。这肯定会起作用。我有点希望Apache Commons或Guava已经这样做了。但是似乎很少有人在Java7中使用NIO.2,你可以投票赞成这个答案,因为它会起作用,而且没有更好的办法。但是,由于赏金只有在获得至少两张赞成票的情况下才会授予,我不确定这是否会有什么不同。常用的组合都被指定为默认值。@franzebner是吗?如上文所列,是的:)文件中的OpenOptions.new*是可选的,默认值是预定义的。这些都是很好的建议,谢谢!顺便说一句,你知道有没有可能让这些方法来创建必要的目录?作为提示:Files.createDirectories(dir,attrs)和Files.createDirectory(dir,attrs)!请注意区别。我的意思是FileUtils.writeByteArrayToFile将在路径中创建不存在的目录,而Files.write失败。特定于实现。。Apache Commons!=JDK 7 SE!具体实现是什么?我知道Commons不是JDK。我在问,是否有一种方法可以得到同样的行为。
FileSystemProvider
.newInputStream(Path, OpenOption...)
.newOutputStream(Path, OpenOption...)
.newByteChannel(Path, Set<? extends OpenOption>, FileAttribute<?>...)
Files
.newBufferedWriter(...)
.newOutputStream(...)
.write(...)