Buat objek File dalam memori dari string di Java

113

Saya memiliki fungsi yang menerima File sebagai argumen. Saya tidak ingin membuat / menulis File baru (saya tidak memiliki akses tulis ke sistem file) untuk meneruskan data string saya ke fungsi. Saya harus menambahkan bahwa data String tidak ada dalam file (jadi saya tidak dapat membaca data saya dari file).

Dapatkah saya menggunakan Stream dan "mentransmisikan" ke objek File?

Jon Romero
sumber
2
Bisakah Anda menautkan / memposting kode yang mengambil Fileobjek? Seperti jawaban yang telah dinyatakan, Fileobjek seperti referensi ke lokasi di sistem file, dan akan sulit untuk disimulasikan tanpa file yang sebenarnya. Namun, jika fungsi Anda menggunakan a FileReaderatau a FileInputStream, Anda dapat dengan mudah mengubah kode untuk menerima input non-file.
101100
File yang dipetakan memori bisa menjadi pilihan Anda. Ini adalah file khusus di Java yang memungkinkan program Java mengakses konten secara langsung dari memori. Untuk detailnya, silakan buka tautan ini: javarevisited.blogspot.com/2012/01/…
Bakteri

Jawaban:

48

Tidak; instance kelas Filemewakili jalur dalam sistem file. Oleh karena itu, Anda hanya dapat menggunakan fungsi itu dengan file. Tapi mungkin ada kelebihan beban yang dibutuhkan InputStreambukan?

manfaat
sumber
76

Biasanya ketika suatu metode menerima file, ada metode lain di dekatnya yang menerima aliran. Jika bukan ini masalahnya, API dikodekan dengan buruk. Jika tidak, Anda dapat menggunakan file sementara, di mana izin biasanya diberikan dalam banyak kasus. Jika itu applet, Anda dapat meminta izin menulis .

Sebuah contoh:

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) {
}
Chris Dennett
sumber
1
Tidak dapat meminta izin menulis (ini Google AppEngine)
Jon Romero
12

Sebuah file objek dalam Java adalah representasi dari jalan ke direktori atau file, bukan file itu sendiri. Anda tidak perlu memiliki akses tulis ke sistem file untuk membuat Fileobjek, Anda hanya memerlukannya jika Anda bermaksud untuk benar-benar menulis ke file (menggunakan FileOutputStream misalnya)

Kevin K
sumber
1
Jika Anda perlu meneruskan file ke API eksternal, Anda memerlukan file sebenarnya - meneruskan objek File "kosong" tidak akan berfungsi.
Andrei Volgin
8

The Filekelas mewakili "ide" dari file, bukan pegangan sebenarnya untuk digunakan untuk I / O. Inilah mengapa Filekelas memiliki file.exists() metode, untuk memberi tahu Anda jika file tersebut ada atau tidak. (Bagaimana Anda bisa memiliki Fileobjek yang tidak ada?)

Sebaliknya, membuat a new FileInputStream(new File("/my/file"))memberi Anda aliran aktual untuk membaca byte.

wberry
sumber
-1
FileReader r = new FileReader(file);

Gunakan pembaca file, muat file, lalu tulis isinya ke buffer string.

contoh

Tautan di atas menunjukkan kepada Anda contoh bagaimana mencapai ini. Seperti posting lain untuk jawaban ini mengatakan untuk memuat file ke dalam memori Anda tidak memerlukan akses tulis selama Anda tidak berencana membuat perubahan pada file sebenarnya.

Cristian
sumber