ELR Skrevet 3. februar 2007 Skrevet 3. februar 2007 Heisann! La oss si at jeg har en tekstfil som inneholder tall. Linjevis. Til nå har jeg latt programmet lese gjennom filen en gang først slik at jeg kan finne ut hvor stor tabell jeg må lage, og så lest inn på nytt og plassert i tabellen. Dette er tungvint! Jeg kunne nok brukt en ArrayList eller noe, men det blir tungvint det også, da tallene må flyttes over i etterkant. Dessuten så blir det brukt exception for å finne slutten på filen, noe som jeg ikke liker. Hvordan kan jeg finne lengden på filen på en enkel måte, slik at innlesing kan foregå i to operasjoner? -Lage tabell etter filens lengde -Lese tallene inn i tabellen
___ Skrevet 3. februar 2007 Skrevet 3. februar 2007 Heisann! La oss si at jeg har en tekstfil som inneholder tall. Linjevis. Til nå har jeg latt programmet lese gjennom filen en gang først slik at jeg kan finne ut hvor stor tabell jeg må lage, og så lest inn på nytt og plassert i tabellen. Dette er tungvint! Jeg kunne nok brukt en ArrayList eller noe, men det blir tungvint det også, da tallene må flyttes over i etterkant. Dessuten så blir det brukt exception for å finne slutten på filen, noe som jeg ikke liker. Hvordan kan jeg finne lengden på filen på en enkel måte, slik at innlesing kan foregå i to operasjoner? -Lage tabell etter filens lengde -Lese tallene inn i tabellen 7862953[/snapback] Det er ingenting i veien for å benytte exceptions slik du beskriver. Det er faktisk en veldig smart måte å utnytte exceptions på. Jeg gjør det selv i andre sammenhenger. Hilsen Werner
ELR Skrevet 3. februar 2007 Forfatter Skrevet 3. februar 2007 Ok, takk skal du ha! Jeg driver kun programmering på hobbybasis nå, tok noen javafag på universitetet for lenge siden, og en foreleser der likte ikke at jeg gjorde det. Men siden du går god for et skal jeg fotsette med det
Ric_H Skrevet 4. februar 2007 Skrevet 4. februar 2007 (endret) Det foreleseren ikke likte var vel antageligvis at du brukte exceptions som en kontrollstruktur. EDIT: sier ikke at det nødvendigvis er et problem i denne sammenhengen, men jeg synes det er litt unødvendig, fordi strengt tatt vet du at du kommer til slutten av filen før eller senere. Det er ikke nødvendig å bruke et exception for å finne enden av filen, du kan for eksempel bruke BufferedReader sin metode readLine() som returnerer null ved eof. Her er et enkelt eksempel for skriving og lesing fra fil. Du finner sikkert mye nyttig om emnet på nettet med relevante søkeord. public static void main(String args[]) { try { BufferedWriter bw = new BufferedWriter(new FileWriter("filnavn.txt")); for(int i = 0; i < 3; i++) { bw.write("Linje " + Integer.toString(i)); bw.newLine(); } bw.close(); BufferedReader br = new BufferedReader(new FileReader("filnavn.txt")); String line; while ((line = br.readLine()) != null) { System.out.println(line); } br.close(); } catch(FileNotFoundException e) { System.out.println("File not found: " + e.getMessage()); } catch(IOException e) { System.out.println("Error writing / reading file: " + e.getMessage()); } } Endret 4. februar 2007 av Ric_H
ELR Skrevet 5. februar 2007 Forfatter Skrevet 5. februar 2007 Tusen takk skal du ha! Det er en enkel og fin måte å gjøre det på
blackbrrd Skrevet 8. februar 2007 Skrevet 8. februar 2007 Veldig typisk kode for å f.eks lese inn en tabell: BufferedReader br = new BufferedReader(new FileReader("filnavn.txt")); String columnSeparator = ";{1}"; Vector<String[]> vecRows = new Vector<String[]>(); while(br.ready()) { vecRows.add(br.readLine().splitAll(columnSeparator)); } Du ender da opp med en Vector med en String array pr linje. Grunnen til at columnSeparator ikke bare er ;, men ;{1} er at det er en regular expression som blir brukt i splitAll metoden. Denne regular expressionen sier at den skal splitte på hver eneste ;. Det finnes forresten en praktisk metode i Vector, toArray() som gjør at du kan gjøre om en Vector til... ja, du gjettet det, en array
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å