web-dev-qa-db-ja.com

getResourceAsStream()から返されたファイルストリームに書き込みます

getResourceAsStream()からInputStreamを取得し、返されたInputStreamBufferedReaderに渡すことでファイルから読み取ることができました。

ファイルに書き込む方法はありますか?

22
Andreas Grech

直接ではありませんが、no --getResourceAsStream()は読み取り専用リソースのビューを返すことを目的としています。

ただし、リソースが書き込み可能なファイルであることがわかっている場合は、いくつかのフープをジャンプできます。

URL resourceUrl = getClass().getResource(path);
File file = new File(resourceUrl.toURI());
OutputStream output = new FileOutputStream(file);

これはUNIXスタイルのシステムではうまく機能するはずですが、Windowsのファイルパスがこの消化不良を引き起こす可能性があります。それを試してみてください、しかし、あなたは大丈夫かもしれません。

35
skaffman

ファイルに書き込む方法はありますか?

誰がそれがファイルだと言いますか? getResourceAsStream()の要点は、それが真実ではない可能性があるため、それを抽象化することです。具体的には、リソースはJARファイル内にあるか、HTTPサーバーから読み取られるか、またはClassLoaderの実装者が想像できるすべてのものである可能性があります。

プログラム配布の一部であるリソースに書き込みたいしたくないことは本当にありません。ほとんどの場合、それは概念的に間違ったことです。設定またはユーザー固有のデータは、 Preferences API またはユーザーのホームディレクトリに移動する必要があります。

10