"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
FileInputStream(String fileName);
- Dette er konstruktøren. Det lader dig angive navnet på en fil på disken, hvorfra det oprettede objekt vil læse data.
int read();
— Denne metode læser en byte fra filen og returnerer den. Returværdien udvides til en int.
int available();
— Denne metode returnerer antallet af ulæste (tilgængelige) bytes.
void close();
— 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:

Opsummer alle bytes i en fil
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
FileOutputStream (String fileName);
"Dette er konstruktøren. Den lader dig angive navnet på en fil på disken, som det oprettede objekt vil skrive data til."
void write(int data);
"Denne metode skriver den næste byte, trunkerer data til en byte."
void flush();
"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.

void close();
"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:

Kopier 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."