"We beginnen met streams voor invoer/uitvoer van bestanden. Maar first things first."

Er zijn twee klassen voor het lezen en schrijven van bestanden: FileInputStream en FileOutputStream . Zoals je waarschijnlijk al geraden hebt, kan FileInputStream achtereenvolgens bytes uit een bestand lezen en kan FileOutputStream achtereenvolgens bytes naar een bestand schrijven. Dit zijn de methoden die deze klassen hebben:

Methode Wat de methode doet
FileInputStream(String fileName);
— Dit is de constructeur. Hiermee kunt u de naam specificeren van een bestand op schijf, waaruit het gemaakte object gegevens zal lezen.
int read();
— Deze methode leest één byte uit het bestand en retourneert deze. De retourwaarde wordt verbreed tot een int.
int available();
— Deze methode retourneert het aantal ongelezen (beschikbare) bytes.
void close();
— Deze methode «sluit» de stream. Je roept dit aan als je klaar bent met werken met de stream.
Het object voert vervolgens de huishoudelijke bewerkingen uit die nodig zijn om het bestand te sluiten, enz
. Op dit moment kunt u geen gegevens meer uit de stream lezen.

Laten we voor de lol de som van alle bytes in een bestand berekenen. Zo ziet de code eruit:

Tel alle bytes in een bestand op
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.
}

"We hebben zoiets al onderzocht. Hoe is FileOutputStream georganiseerd?"

"Oké. Kijk hier eens naar:"

Methode Wat de methode doet
FileOutputStream (String fileName);
"Dit is de constructor. Hiermee kunt u de naam specificeren van een bestand op schijf waarnaar het gemaakte object gegevens zal schrijven."
void write(int data);
"Deze methode schrijft de volgende byte, waarbij gegevens worden afgekapt tot één byte."
void flush();
"De te schrijven gegevens worden vaak eerst in grote blokken in het geheugen verzameld en daarna pas naar schijf geschreven."

De opdracht flush dwingt alle niet-opgeslagen informatie naar schijf te schrijven.

void close();
"Deze methode «sluit» de stream. Je roept dit aan als je klaar bent met werken met de stream.'
Het object voert vervolgens de huishoudelijke bewerkingen uit die nodig zijn om het bestand te sluiten, enz.

U kunt geen gegevens meer naar de stream schrijven en flush wordt automatisch aangeroepen.

"Dat is het?"

"Ja, er is eigenlijk maar één methode om te schrijven: write(). Het schrijft slechts één byte per keer. Maar je kunt zoveel informatie naar het bestand schrijven als je wilt."

Programmeren is een proces waarbij een grote en complexe taak wordt opgedeeld in vele kleine. In wezen vindt hier hetzelfde proces plaats: het lezen en schrijven van grote blokken gegevens wordt opgesplitst in het lezen en schrijven in hapklare stukjes - byte per keer.

Hier ziet u hoe u deze klassen kunt gebruiken om een ​​bestand op schijf te kopiëren:

Kopieer een bestand op schijf
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();
}

"Bedankt, Rishi. Ik begrijp eindelijk hoe deze code werkt."