"Kami akan mulai dengan aliran untuk input/output file. Tapi hal pertama yang pertama."
Ada dua kelas untuk membaca dan menulis file: FileInputStream dan FileOutputStream . Seperti yang mungkin sudah Anda duga, FileInputStream dapat secara berurutan membaca byte dari sebuah file, dan FileOutputStream dapat menulis byte secara berurutan ke sebuah file. Berikut adalah metode yang dimiliki kelas-kelas ini:
metode | Apa yang dilakukan metode ini |
---|---|
|
— Ini konstruktornya. Ini memungkinkan Anda menentukan nama file pada disk, dari mana objek yang dibuat akan membaca data. |
|
— Metode ini membaca satu byte dari file dan mengembalikannya. Nilai pengembalian diperlebar menjadi int. |
|
— Metode ini mengembalikan jumlah byte yang belum dibaca (tersedia). |
|
— Metode ini «menutup» aliran. Anda menyebutnya setelah selesai bekerja dengan aliran. Objek kemudian melakukan operasi pembersihan yang diperlukan untuk menutup file, dll. Pada titik ini, Anda tidak dapat membaca data lagi dari aliran. |
Sekadar iseng, mari hitung jumlah semua byte dalam sebuah file. Berikut tampilan kodenya:
public static void main(String[] args) throws Exception
{
//Create a FileInputStream object bound to «c:/data.txt».
FileInputStream inputStream = new FileInputStream("c:/data.txt");
long sum = 0;
while (inputStream.available() > 0) //as long as there are unread bytes
{
int data = inputStream.read(); //Read the next byte
sum += data; //Add it to the running total
}
inputStream.close(); // Close the stream
System.out.println(sum); // Display the sum on the screen.
}
"Kami sudah menyelidiki hal seperti ini. Bagaimana FileOutputStream diatur?"
"Oke. Lihat ini:"
metode | Apa yang dilakukan metode ini |
---|---|
|
"Ini adalah konstruktor. Ini memungkinkan Anda menentukan nama file pada disk, tempat objek yang dibuat akan menulis data." |
|
"Metode ini menulis byte berikutnya, memotong data menjadi satu byte." |
|
"Data yang akan ditulis seringkali pertama kali dikumpulkan dalam blok besar di memori, dan baru kemudian ditulis ke disk."
Perintah flush memaksa semua informasi yang belum disimpan untuk ditulis ke disk. |
|
"Metode ini «menutup» aliran. Anda memanggil ini setelah selesai bekerja dengan aliran." Objek kemudian melakukan operasi housekeeping yang diperlukan untuk menutup file, dll. |
Anda tidak dapat lagi menulis data ke aliran, dan flush dipanggil secara otomatis.
"Itu dia?"
"Ya, sebenarnya hanya ada satu metode untuk menulis: write(). Metode ini hanya menulis satu byte dalam satu waktu. Namun, metode ini memungkinkan Anda menulis informasi sebanyak yang Anda inginkan ke file."
Pemrograman adalah proses membagi satu tugas besar dan kompleks menjadi banyak tugas kecil. Pada dasarnya proses yang sama terjadi di sini: membaca dan menulis blok data besar dipecah menjadi membaca dan menulis dalam potongan berukuran kecil—satu byte setiap kali.
Inilah cara Anda dapat menggunakan kelas-kelas ini untuk menyalin file di disk:
public static void main(String[] args) throws Exception
{
//Create a stream to read bytes from a file
FileInputStream inputStream = new FileInputStream("c:/data.txt");
//Create a stream to write bytes to a file
FileOutputStream outputStream = new FileOutputStream("c:/result.txt");
while (inputStream.available() > 0) //as long as there are unread bytes
{
int data = inputStream.read(); // Read the next byte into the data variable
outputStream.write(data); // and write it to the second stream
}
inputStream.close(); //Close both streams. We don't need them any more.
outputStream.close();
}
"Terima kasih, Rishi. Saya akhirnya mengerti bagaimana sebenarnya kode ini bekerja."