web-dev-qa-db-ja.com

Javaの文字列からメモリ内にFileオブジェクトを作成します

引数としてFileを受け入れる関数があります。文字列データを関数に渡すために、新しいファイルを作成/書き込みしたくありません(ファイルシステムへの書き込みアクセス権がありません)。 Stringデータがファイルに存在しないことを追加する必要があります(したがって、ファイルからデータを読み取ることができません)。

Streamsを使用して、それらをFileオブジェクトに「キャスト」できますか?

100
Jon Romero

番号;クラスFileのインスタンスは、ファイルシステムのパスを表します。したがって、その関数はファイルでのみ使用できます。しかし、代わりにInputStreamをとるオーバーロードがありますか?

44
meriton

通常、メソッドがファイルを受け入れるとき、ストリームを受け入れる別のメソッドが近くにあります。そうでない場合は、APIのコーディングが不適切です。それ以外の場合、一時ファイルを使用できます。多くの場合、通常は許可が付与されます。アプレットの場合は、 書き込み許可の要求 を使用できます。

例:

try {
    // Create temp file.
    File temp = File.createTempFile("pattern", ".suffix");

    // Delete temp file when program exits.
    temp.deleteOnExit();

    // Write to temp file
    BufferedWriter out = new BufferedWriter(new FileWriter(temp));
    out.write("aString");
    out.close();
} catch (IOException e) {
}
62
Chris Dennett

File Javaのオブジェクトは、ファイル自体ではなく、ディレクトリまたはファイルへのパスの表現です。 Fileオブジェクトを作成するためにファイルシステムへの書き込みアクセス権は必要ありません。実際にファイルに書き込む場合にのみ必要です(たとえば FileOutputStream を使用)

10
Kevin K

Fileクラスは、ファイルの「アイデア」を表し、I/Oに使用する実際のハンドルではありません。これが、Fileクラスに.exists()メソッドがあり、ファイルが存在するかどうかを通知する理由です。 (どうすれば、存在しないFileオブジェクトを持つことができますか?)

対照的に、new FileInputStream(new File("/my/file"))を構築すると、実際のストリームからバイトを読み取ることができます。

6
wberry