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


113

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

ストリームを使用してFileオブジェクトに「キャスト」できますか?


2
Fileオブジェクトを取るコードをリンク/投稿できますか?答えが述べたように、Fileオブジェクトはファイルシステム内の場所への参照のようなものであり、実際のファイルなしでシミュレーションするのは難しいでしょう。ただし、関数がFileReaderまたはをとった場合、FileInputStreamファイル以外の入力を受け入れるようにコードを簡単に変更できます。
101100 2011

メモリマップファイルを選択できます。これらは、Javaプログラムがメモリから直接コンテンツにアクセスできるようにするJavaの特別なファイルです。詳細については、このリンクを介して行ってください。javarevisited.blogspot.com/2012/01/...
細菌

回答:


48

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


76

通常、メソッドがファイルを受け入れる場合、近くにストリームを受け入れる別のメソッドがあります。そうでない場合、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) {
}

1
書き込み権限をリクエストできません(Google AppEngineです)
Jon Romero、

12

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


1
ファイルを外部APIに渡す必要がある場合は、実際のファイルが必要です。「空の」Fileオブジェクトを渡しても機能しません。
Andrei Volgin

8

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

対照的に、a new FileInputStream(new File("/my/file"))を作成すると、バイトを読み取る実際のストリームが得られます。


-1
FileReader r = new FileReader(file);

ファイルリーダーを使用してファイルを読み込み、その内容を文字列バッファーに書き込みます。

上記のリンクは、これを行う方法の例を示しています。この回答に対する他の投稿によると、ファイルをメモリにロードする場合、実際のファイルに変更を加える予定がない限り、書き込みアクセスは必要ありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.