"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
FileInputStream(String fileName);
— Ini konstruktornya. Ini memungkinkan Anda menentukan nama file pada disk, dari mana objek yang dibuat akan membaca data.
int read();
— Metode ini membaca satu byte dari file dan mengembalikannya. Nilai pengembalian diperlebar menjadi int.
int available();
— Metode ini mengembalikan jumlah byte yang belum dibaca (tersedia).
void close();
— 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:

Jumlahkan semua byte dalam sebuah file
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
FileOutputStream (String fileName);
"Ini adalah konstruktor. Ini memungkinkan Anda menentukan nama file pada disk, tempat objek yang dibuat akan menulis data."
void write(int data);
"Metode ini menulis byte berikutnya, memotong data menjadi satu byte."
void flush();
"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.

void close();
"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:

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