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?


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?


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

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)


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.


-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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.