"Vi starter med streams til filinput/-output. Men først og fremmest."
Der er to klasser til at læse og skrive filer: FileInputStream og FileOutputStream . Som du sikkert allerede har gættet, kan FileInputStream sekventielt læse bytes fra en fil, og FileOutputStream kan sekventielt skrive bytes til en fil. Her er de metoder, som disse klasser har:
Metode | Hvad metoden gør |
---|---|
|
- Dette er konstruktøren. Det lader dig angive navnet på en fil på disken, hvorfra det oprettede objekt vil læse data. |
|
— Denne metode læser en byte fra filen og returnerer den. Returværdien udvides til en int. |
|
— Denne metode returnerer antallet af ulæste (tilgængelige) bytes. |
|
— Denne metode «lukker» strømmen. Du kalder dette, når du er færdig med at arbejde med streamen. Objektet udfører derefter de nødvendige husholdningsoperationer for at lukke filen osv. På dette tidspunkt kan du ikke læse flere data fra strømmen. |
Bare for sjov, lad os beregne summen af alle bytes i en fil. Sådan ser koden ud:
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.
}
"Vi har allerede undersøgt noget som dette. Hvordan er FileOutputStream organiseret?"
"OK. Se på det her:"
Metode | Hvad metoden gør |
---|---|
|
"Dette er konstruktøren. Den lader dig angive navnet på en fil på disken, som det oprettede objekt vil skrive data til." |
|
"Denne metode skriver den næste byte, trunkerer data til en byte." |
|
"De data, der skal skrives, bliver ofte først samlet i store blokke i hukommelsen og derefter kun skrevet til disk."
Flush-kommandoen tvinger al ikke-gemt information til at blive skrevet til disken. |
|
"Denne metode "lukker" strømmen. Du kalder dette, når du er færdig med at arbejde med strømmen." Objektet udfører derefter de nødvendige husholdningsoperationer for at lukke filen osv. |
Du kan ikke længere skrive data til streamen, og flush kaldes automatisk.
"Det er det?"
"Ja, der er faktisk kun én metode til at skrive: write(). Den skriver kun én byte ad gangen. Men den lader dig skrive så meget information, som du vil, til filen."
Programmering er en proces med at dele en stor og kompleks opgave op i mange små. I det væsentlige sker den samme proces her: læsning og skrivning af store datablokke opdeles i læsning og skrivning i små stykker - en byte ad gangen.
Sådan kan du bruge disse klasser til at kopiere en fil på disken:
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();
}
"Tak, Rishi. Jeg forstår endelig, hvordan denne kode rent faktisk fungerer."
GO TO FULL VERSION