2011-08-16 8 views
68

ファイルを引数として受け入れる関数があります。私は文字列データを関数に渡すために新しいファイルを作成したり書いたりしたくない(ファイルシステムへの書き込みアクセス権がない)。 Stringデータがファイルに存在しないため、ファイルからデータを読み込むことはできません。Javaの文字列からメモリ内にFileオブジェクトを作成します

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

+2

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

+0

メモリマップファイルを選択できます。これらは、Javaプログラムがメモリから直接コンテンツにアクセスできるJavaの特殊ファイルです。詳細については、次のリンクを参照してください。http://javarevisited.blogspot.com/2012/01/memorymapped-file-and-io-in-java.html – Bikku

答えて

32

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

+0

いいえ:/過負荷機能なし –

-1
FileReader r = new FileReader(file); 

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

example

上記のリンクはあなたにこれを実現する方法の例を示します。この回答の他の記事では、実際のファイルを変更する予定がない限り、ファイルをメモリにロードすると書込みアクセスは必要ありません。

7

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

3

Fileクラスは、 I/Oに使用する実際のハンドルではありません。このため、Fileクラスにはファイルが存在するかどうかを示す.exists()メソッドがあります。 (どうしてFileオブジェクトが存在しないのですか?

これに対して、new FileInputStream(new File("/my/file"))を作成すると、実際にバイトを読み込むストリームが得られます。

+2

良い点;しかし、質問に答えることはありません。 – Jus12

47

通常、メソッドがファイルを受け入れる場合、ストリームを受け取る別のメソッドが近くにあります。そうでない場合、APIはひどくコード化されています。それ以外の場合は、一時ファイルを使用することができます。通常、多くの場合、許可が与えられます。アプレットの場合は、request write permissionとすることができます。

例:

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) { 
} 
+0

書き込み権限をリクエストできません(Google App Engine) –

関連する問題