"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 |
---|---|
|
— Dit is de constructeur. Hiermee kunt u de naam specificeren van een bestand op schijf, waaruit het gemaakte object gegevens zal lezen. |
|
— Deze methode leest één byte uit het bestand en retourneert deze. De retourwaarde wordt verbreed tot een int. |
|
— Deze methode retourneert het aantal ongelezen (beschikbare) bytes. |
|
— 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:
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 |
---|---|
|
"Dit is de constructor. Hiermee kunt u de naam specificeren van een bestand op schijf waarnaar het gemaakte object gegevens zal schrijven." |
|
"Deze methode schrijft de volgende byte, waarbij gegevens worden afgekapt tot één byte." |
|
"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. |
|
"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:
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."
GO TO FULL VERSION