Java 使用常用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

是否有一种简洁、惯用的方法(可能使用Apache Commons)来指定OpenOption的常见组合,如
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:读取
    • 默认值(如果没有选项):创建并截断现有的
abstract
FileSystemProvider.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(...)