"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 |
---|---|
|
— Dette er konstruktøren. Den lar deg spesifisere navnet på en fil på disken, som det opprettede objektet vil lese data fra. |
|
— Denne metoden leser én byte fra filen og returnerer den. Returverdien utvides til en int. |
|
— Denne metoden returnerer antall uleste (tilgjengelige) byte. |
|
— 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:
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 |
---|---|
|
"Dette er konstruktøren. Den lar deg spesifisere navnet på en fil på disken som det opprettede objektet vil skrive data til." |
|
"Denne metoden skriver neste byte, og avkorter data til en byte." |
|
"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. |
|
"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:
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."
GO TO FULL VERSION