"Kami akan mulakan dengan strim untuk input/output fail. Tetapi perkara pertama dahulu."

Terdapat dua kelas untuk membaca dan menulis fail: FileInputStream dan FileOutputStream . Seperti yang anda mungkin sudah meneka, FileInputStream boleh membaca bait secara berurutan daripada fail, dan FileOutputStream boleh menulis bait secara berurutan ke fail. Berikut ialah kaedah yang ada pada kelas ini:

Kaedah Apakah kaedah yang dilakukan
FileInputStream(String fileName);
- Ini adalah pembina. Ia membolehkan anda menentukan nama fail pada cakera, dari mana objek yang dicipta akan membaca data.
int read();
— Kaedah ini membaca satu bait daripada fail dan mengembalikannya. Nilai pulangan diluaskan kepada int.
int available();
— Kaedah ini mengembalikan bilangan bait yang belum dibaca (tersedia).
void close();
— Kaedah ini «menutup» aliran. Anda memanggil ini apabila anda selesai bekerja dengan strim.
Objek kemudian melakukan operasi pengemasan yang diperlukan untuk menutup fail, dsb.
Pada ketika ini, anda tidak boleh membaca data lagi daripada strim.

Hanya untuk keseronokan itu, mari kita mengira jumlah semua bait dalam fail. Inilah rupa kod tersebut:

Jumlahkan semua bait dalam fail
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 telah melihat perkara seperti ini. Bagaimanakah FileOutputStream disusun?"

"OK. Tengok ni:"

Kaedah Apakah kaedah yang dilakukan
FileOutputStream (String fileName);
"Ini ialah pembina. Ia membolehkan anda menentukan nama fail pada cakera, yang objek yang dicipta akan menulis data."
void write(int data);
"Kaedah ini menulis bait seterusnya, memotong data kepada satu bait."
void flush();
"Data yang akan ditulis selalunya mula-mula dikumpulkan dalam blok besar dalam ingatan, dan kemudian hanya ditulis ke cakera."

Perintah flush memaksa semua maklumat yang tidak disimpan untuk ditulis ke cakera.

void close();
"Kaedah ini «menutup» strim. Anda memanggil ini apabila anda selesai bekerja dengan strim."
Objek kemudian melakukan operasi pengemasan yang diperlukan untuk menutup fail, dsb.

Anda tidak boleh menulis data ke strim lagi dan siram dipanggil secara automatik.

"Itu sahaja?"

"Ya, sebenarnya hanya ada satu kaedah untuk menulis: write(). Ia menulis hanya satu bait pada satu masa. Tetapi ia membenarkan anda menulis seberapa banyak maklumat yang anda mahu ke dalam fail."

Pengaturcaraan ialah satu proses membahagikan satu tugas yang besar dan kompleks kepada banyak yang kecil. Pada asasnya proses yang sama berlaku di sini: membaca dan menulis blok besar data dipecahkan kepada membaca dan menulis dalam kepingan bersaiz gigitan—satu bait pada satu masa.

Begini cara anda boleh menggunakan kelas ini untuk menyalin fail pada cakera:

Salin fail pada cakera
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 faham bagaimana kod ini sebenarnya berfungsi."