"Dosya girişi/çıkışı için akışlarla başlayacağız. Ama önce ilk şeyler."

Dosyaları okumak ve yazmak için iki sınıf vardır: FileInputStream ve FileOutputStream . Muhtemelen zaten tahmin ettiğiniz gibi, FileInputStream bir dosyadan baytları sırayla okuyabilir ve FileOutputStream bir dosyaya baytları sırayla yazabilir. İşte bu sınıfların sahip olduğu yöntemler:

Yöntem Yöntem ne yapar?
FileInputStream(String fileName);
— Bu yapıcıdır. Oluşturulan nesnenin verileri okuyacağı diskteki bir dosyanın adını belirtmenizi sağlar.
int read();
— Bu yöntem, dosyadan bir bayt okur ve onu döndürür. Dönüş değeri bir int'e genişletilir.
int available();
— Bu yöntem okunmamış (mevcut) bayt sayısını döndürür.
void close();
— Bu yöntem akışı "kapatır". Akışla çalışmayı bitirdiğinizde bunu çağırırsınız.
Nesne daha sonra dosyayı vb. kapatmak için gereken temizlik işlemlerini gerçekleştirir.
Bu noktada, akıştan daha fazla veri okuyamazsınız.

Sadece eğlencesine, bir dosyadaki tüm baytların toplamını hesaplayalım. İşte kodun nasıl göründüğü:

Bir dosyadaki tüm baytları topla
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.
}

"Bunun gibi bir şeyi zaten inceledik. FileOutputStream nasıl organize ediliyor?"

"Tamam. Şuna bak:"

Yöntem Yöntem ne yapar?
FileOutputStream (String fileName);
"Bu yapıcıdır. Oluşturulan nesnenin verileri yazacağı diskteki bir dosyanın adını belirtmenize izin verir."
void write(int data);
"Bu yöntem, verileri bir bayta indirerek bir sonraki baytı yazar."
void flush();
"Yazılacak veriler genellikle önce bellekte büyük bloklar halinde toplanır ve sonra yalnızca diske yazılır."

Flush komutu, kaydedilmemiş tüm bilgileri diske yazılmaya zorlar.

void close();
"Bu yöntem akışı 'kapatır'. Akışla çalışmayı bitirdiğinizde bunu çağırırsınız."
Nesne daha sonra dosyayı vb. kapatmak için gereken temizlik işlemlerini gerçekleştirir.

Artık akışa veri yazamazsınız ve yıkama otomatik olarak çağrılır.

"Bu kadar?"

"Evet, aslında yazmak için tek bir yöntem var: write(). Her seferinde yalnızca bir bayt yazıyor. Ama dosyaya istediğiniz kadar bilgi yazmanıza izin veriyor."

Programlama, büyük ve karmaşık bir görevi birçok küçük göreve bölme işlemidir. Temelde aynı süreç burada da oluyor: büyük veri bloklarını okumak ve yazmak, her seferinde bir bayt olmak üzere, ısırık büyüklüğünde parçalar halinde okuma ve yazmaya bölünür.

Diskteki bir dosyayı kopyalamak için bu sınıfları şu şekilde kullanabilirsiniz:

Diskteki bir dosyayı kopyalama
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();
}

"Teşekkürler Rishi. Sonunda bu kodun gerçekte nasıl çalıştığını anladım."