Gå til innhold

Lukke strømmer ved lesing og skriving til/fra fil


Anbefalte innlegg

Hei

 

Sitter og jobber med en oppgave hvor vi skal lese fra og skrive til fil. Til dette bruker vi klassene BufferedReader, FileReader, FileWriter og PrintWriter. Hvilke av strømmene må lukkes med close(), og hvor viktig er det egentlig å gjøre det?

 

Og hva er egentlig en strøm?? Vil alle disse klassene danne/bruke/være en strøm?

 

Takker for svar :)

Lenke til kommentar
Videoannonse
Annonse

Dersom du ikke lukker streamen vil vel filen bli sett på som åpen av OS og da kan ikke andre programmer benytte seg av filen. Om du bruker reader blir filen markert som "read", om du bruker writer får den "append" eller "write".

Lenke til kommentar

oki.. nå gjør jeg det på denne måten:

public void lesAlleStudenterFraTekstFil(String datafilnavn) {
FileReader filLeser = null;
BufferedReader tekstLeser = null;
try{
  filLeser = new FileReader(datafilnavn);
  tekstLeser = new BufferedReader(filLeser);
  // Annen kode her..

} catch(FileNotFoundException e) {
  System.out.println("Kunne ikke finne filen: " + datafilnavn);
} catch(IOException e) {
  System.out.println("IOException: " + e);
} finally {
  try {
	if(tekstLeser != null) {
	  tekstLeser.close();
	}
	if(filLeser != nulll) {
	  filLeser.close();
	}
  } catch(Exception e) {}
}

 }

Er dette ok? Det er vel ca sånn de gjør det i boken, bare at de kun lukker tekstLeser uten at jeg vet hvorfor..

Lenke til kommentar
oki.. nå gjør jeg det på denne måten:

public void lesAlleStudenterFraTekstFil(String datafilnavn) {
FileReader filLeser = null;
BufferedReader tekstLeser = null;
try{
  filLeser = new FileReader(datafilnavn);
  tekstLeser = new BufferedReader(filLeser);
  // Annen kode her..

} catch(FileNotFoundException e) {
  System.out.println("Kunne ikke finne filen: " + datafilnavn);
} catch(IOException e) {
  System.out.println("IOException: " + e);
} finally {
  try {
	if(tekstLeser != null) {
	  tekstLeser.close();
	}
	if(filLeser != nulll) {
	  filLeser.close();
	}
  } catch(Exception e) {}
}

 }

Er dette ok? Det er vel ca sånn de gjør det i boken, bare at de kun lukker tekstLeser uten at jeg vet hvorfor..

 

Jepp!

 

Werner

Lenke til kommentar
Er dette ok? Det er vel ca sånn de gjør det i boken, bare at de kun lukker tekstLeser uten at jeg vet hvorfor..

 

Hadde jeg vært deg hadde jeg spurt læreren / foreleseren om hvorfor de bare lukker den ene når de ser tilnærmet identiske ut. Send en epost og spør, husk å rapportere tilbake til oss :)

Lenke til kommentar
Er dette ok? Det er vel ca sånn de gjør det i boken, bare at de kun lukker tekstLeser uten at jeg vet hvorfor..

Nesten, for å være 100% sikker at alle streams lukkes riktig:

public void lesAlleStudenterFraTekstFil(String datafilnavn) {
FileReader filLeser = null;
BufferedReader tekstLeser = null;
try{
  filLeser = new FileReader(datafilnavn);
  tekstLeser = new BufferedReader(filLeser);
  // Annen kode her..

} catch(FileNotFoundException e) {
  System.out.println("Kunne ikke finne filen: " + datafilnavn);
} catch(IOException e) {
  System.out.println("IOException: " + e);
} finally {
	 // Deler try-catch i to deler, slik at filLeser.close() også blir kallet, 
	 // i tilfelle tekstLeser.close() kaster en Exception
  try {
	if(tekstLeser != null) {
	  tekstLeser.close();
	}
  } catch(Exception e) {}
  try {
	if(filLeser != nulll) {
	  filLeser.close();
	}
  } catch(Exception e) {}
}

 }

 

I teori burde det være nok å kalle close() metoden i den øverste delen av Stream-kjeden (i dette tilfelle er det egentlig nok å kalle tekstLeser.close()). Desverre kan det hende at close() blir avbrutt et eller annet sted i kjeden (f.eks. org.apache.tools.zip.ZipOutPutStream har denne uheldige egenskapen), og du bør derfor lukke alle streams du selv har instansiert. Gjør det til en vane.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...