"Vi starter med strømmer for inndata/utdata for filer. Men først ting først."

Det er to klasser for lesing og skriving av filer: FileInputStream og FileOutputStream . Som du sikkert allerede har gjettet, kan FileInputStream sekvensielt lese byte fra en fil, og FileOutputStream kan sekvensielt skrive byte til en fil. Her er metodene som disse klassene har:

Metode Hva metoden gjør
FileInputStream(String fileName);
— Dette er konstruktøren. Den lar deg spesifisere navnet på en fil på disken, som det opprettede objektet vil lese data fra.
int read();
— Denne metoden leser én byte fra filen og returnerer den. Returverdien utvides til en int.
int available();
— Denne metoden returnerer antall uleste (tilgjengelige) byte.
void close();
— Denne metoden «stenger» strømmen. Du kaller dette når du er ferdig med å jobbe med strømmen.
Objektet utfører deretter rengjøringsoperasjonene som trengs for å lukke filen osv.
På dette tidspunktet kan du ikke lese flere data fra strømmen.

Bare for moro skyld, la oss beregne summen av alle bytene i en fil. Slik ser koden ut:

Oppsummer alle bytene 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 sett på noe sånt som dette. Hvordan er FileOutputStream organisert?"

"OK. Se på dette:"

Metode Hva metoden gjør
FileOutputStream (String fileName);
"Dette er konstruktøren. Den lar deg spesifisere navnet på en fil på disken som det opprettede objektet vil skrive data til."
void write(int data);
"Denne metoden skriver neste byte, og avkorter data til en byte."
void flush();
"Dataene som skal skrives blir ofte først samlet i store blokker i minnet, og deretter bare skrevet til disk."

Flush-kommandoen tvinger all ulagret informasjon til å bli skrevet til disk.

void close();
"Denne metoden «lukker» strømmen. Du kaller dette når du er ferdig med å jobbe med strømmen."
Objektet utfører deretter rengjøringsoperasjonene som trengs for å lukke filen osv.

Du kan ikke lenger skrive data til strømmen, og flush kalles automatisk.

"Det er det?"

"Ja, det er faktisk bare én metode for å skrive: write(). Den skriver bare én byte om gangen. Men den lar deg skrive så mye informasjon du vil til filen."

Programmering er en prosess for å dele en stor og kompleks oppgave i mange små. I hovedsak skjer den samme prosessen her: lesing og skriving av store datablokker er delt inn i lesing og skriving i biter - en byte om gangen.

Slik kan du bruke disse klassene til å kopiere en fil på disk:

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();
}

"Takk, Rishi. Jeg forstår endelig hvordan denne koden faktisk fungerer."