Föreläsning 14 ”Enkel” Filhantering
Javaströmmar All in och utmatning av data i Java sker med hjälp av ”strömmar” Är en koppling mellan en källa och destination… … tangentbordet, skärmen, filer, nätverket Vid inmatning öppnas en ström från en källa Källa program 1 läser data Vid utmatning öppnas en ström till en källa Källa program 1 skriver data
Paketet java.io Innehåller klasser för hantering av strömmar och filer Delas in i 3 huvudgrupper Inströmmar, utströmmar och filklasser Object OutputStream InputStream Writer Reader - InputStreamReader - BufferedReader - FileReader - OutputStreamWriter - BufferedWriter - FileWriter - ObjectInputStream - ObjectOutputStream Teckenströmmar Byteströmmar
Standardströmmar i Java När ett Java program startas finns det tre fördefinierade strömmar System.in (InputStream) Inmatning från tangentbordet System.out (PrintStream) Utmatning till bildskärm System.err (PrintStream) Felutskrift till bildskärm program tangentbord InputStream int b = System.in.read(); InputStream läser en byte i taget Väldigt opraktiskt!
Filtrera Strömmar Vissa strömmar filtrerar data i en annan ström Kombinerar olika strömmar så att data flödar via ett antal filter Buffrar för mer effektiv läsning Konverterar från byte till Unicode System.in läser en byte program tangentbord InputStream InputStreamReader BufferedReader String s = input.readLine(); BufferedReader input = new BufferedReader(new InputStreamReader(System.in);
IOException Alla strömmar som läser eller skriver kan kasta någon form av Exception Måste kastas vidare public String getInput() throws IOException { return input.readLine(); } Eller fångas public String getInput() { try { return input.readLine(); } catch (IOException iofel) { System.err.println("Något gick fel vid inmatning:" + iofel); } }
Läsa/Skriva Till En Fil Det är så pass vanligt att läsa/skriva till en textfil att det finns speciella strömmar för detta FileReader FileWriter Skapas på följande sätt: FileReader in = new FileReader("filnamnet"); FileWriter out = new FileWriter("filnamnet"); // Filnamnet kan t.ex vara "minFil.txt","resultat.dat"
Skriva Till En Fil För mer effektiv skrivning koppla FileReader till en BufferedReader FileWriter fw = new FileWriter("filnamn"); BufferedWriter filut = new BufferedWriter(fw); Skapar alltid en ny fil filut.write("Programmering i");// Skriver en sträng filut.newLine(); // Skriver radbrytning filut.write("Java\n"); // Radbrytning på fel sätt filut.close(); // tömmer och stänger Skriver enbart strängar Stäng alltid filen med close()
Skriva Till En Fil Koppla till en PrintWriter för att använda metoderna println och print FileWriter fw = new FileWriter("filnamn"); BufferedWriter bw = new BufferedWriter(fw); PrintWriter filut = new PrintWriter(bw); filut.println("Programmering i"); filut.println("Java"); filut.print(100); filut.close(); // Stänger filen Kan nu även skriva primitivatyper Glöm inte att kasta eller fånga eventuella Exception
Läsa Från En Fil FileReader läser endast ett tecken åt gången, ineffektivt Koppla till en BufferedReader för att läsa en hel rad med readLine() FileReader in = new FileReader("textfil.txt"); BufferedReader filin = new BufferedReader(in); String rad = filin.readLine(); // Returnerar null när // filen är slut while (rad != null) { System.out.println(rad); rad = filin.readLine(); } filin.close(); // Stänger filen
Läsa/Skriva Objekt Till Fil Serialisering är en teknik för att enkelt och smidigt spara och hämta objekt till en ström Gör det möjligt att lagra objektets data på en fil Eller att skicka objektet via en kommunikationsförbindelse Klasserna som används är: ObjectOutputStream, FileOutputStream ObjectInputStream, FileInputStream