StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING
のようなOpenOptionの一般的な組み合わせを指定するための簡潔で慣用的な方法(おそらくApache Commonsを使用)はありますか?
これらはあなたが持っている簡単な可能性です。
読みやすさを向上させるための静的インポート:
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));
私が提供できる最善の提案は、T ...とT []の同等性をごまかすことです。これは、他のスタックオーバーフローの議論の1つが機能するはずだと言っています
Javaで可変引数を持つメソッドに配列を引数として渡すことはできますか?
そう...
OpenOption myOptions[] = {StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING};
OutputStream foo=OutputStream.newOutputStream(myPath,myOptions);
警告:テストされていません。
_Java.nio.file.Files
_には、OpenOption
varargsパラメーターを持つ5種類のメソッドがあります。
_Files
.newBufferedWriter(...)
.write(...)
.newOutputStream(...)
.newInputStream(...)
.newByteChannel(...)
_
それらはOpenOption
の組み合わせを直接制限しませんが、内部ではそれらすべてが_Java.nio.file.spi.FileSystemProvider
_でこれら3つのメソッドのいくつかを呼び出します。
_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
組み合わせの制限:
abstractFileSystemProvider.newByteChannel(...)
メソッドにはプラットフォームに依存する実装があり、これによりOpenOption
の組み合わせ制限が拡張される場合があります(_Sun.nio.fs.WindowsFileSystemProvider
_のように)。
内部でOpenOption
vargarsを使用するすべてのFilesメソッドは、実装がプラットフォームに依存する抽象FileSystemProvider.newByteChannel(...)
で終わります。したがって、FilesメソッドのOpenOption
の組み合わせの制限は、プラットフォームによって異なります。