toss Skrevet 29. april 2009 Del Skrevet 29. april 2009 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
DCG Skrevet 29. april 2009 Del Skrevet 29. april 2009 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
toss Skrevet 29. april 2009 Forfatter Del Skrevet 29. april 2009 Så jeg må lukke alle objekter av disse klassene? Lenke til kommentar
___ Skrevet 29. april 2009 Del Skrevet 29. april 2009 Så jeg må lukke alle objekter av disse klassene? Alt som kan lukkes, skal lukkes. Werner Lenke til kommentar
toss Skrevet 29. april 2009 Forfatter Del Skrevet 29. april 2009 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
___ Skrevet 30. april 2009 Del Skrevet 30. april 2009 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
kbotnen Skrevet 30. april 2009 Del Skrevet 30. april 2009 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
Patton Skrevet 30. april 2009 Del Skrevet 30. april 2009 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå