Jelenlegi hely

20.1.1 Fájl adatfolyamok használata

A fájl adatfolyamok talán a legkönnyebben megérthető adatfolyamok. A fájl adatfolyamok (FileReader, FileWriter, FileInputStream, és FileOutputStream) a natív fájlrendszer fájljait olvassák, vagy írják. Létrehozhatunk fájl adatfolyamot fájlnév String-ből, File objektummal, vagy FileDescriptor objektummal.

A következő Copy program FileReader és FileWriter segítségével az input.txt tartalmát átírja (átmásolja) az ouput.txt fájlba:

import java.io.*;
public class Copy {
    public static void main(String[] args) throws IOException{
        File inputFile = new File("input.txt");
        File outputFile = new File("output.txt");
        FileReader in = new FileReader(inputFile);
        FileWriter out = new FileWriter(outputFile);
        int c;
        while ((c = in.read()) != -1)
           out.write(c);
        in.close();
        out.close();
    }
}

A program nagyon egyszerű. A FileReader megnyitja a farrago.txt fájlt, a FileWriter pedig az outagain.txt fájlt. A program az in objektummal beolvas minden karaktert a bemeneten a bemeneti fájlból, és az out objektummal kiírja a karaktereket. Ha a bemenet elfogyott (-1), a program bezárja az olvasót és az írót is.

Megjegyzés: Érdemes megfigyelni, a read és write metódusok nem char, hanem int típussal dolgoz-nak. Ennek mindössze az az oka, hogy egy speciális, a char megengedett értéktartományán kívüli visszatérési értéket (a -1-et) is kell nyújtani abban az esetben, ha nincs több olvasható karakter, így a char nem lenne alkalmazható.

A Copy program ezt a kódot használja a FileReader létrehozásához:

File inputFile = new File("input.txt");
FileReader in = new FileReader(inputFile);

A kód létrehoz egy File objektumot, ami a fájl logikai leírására szolgál. A File segédosztályt a java.io tartalmazza. A Copy program ezt az objektumot használja a FileReader felépítéséhez. Azonban a program az inputFile-t akkor is használhatja, ha információt szeretnénk szerezni a fájl egészéről (pl. olvasható-e, mekkora a mérete stb).

A program futása után ugyanannak kell szerepelnie az input.txt és az output.txt fájlban is.

Ne feledjük, hogy a FileReader és a FileWriter 16-bites karaktert olvas és ír. Azonban, a legtöbb natív fájlrendszer 8-biten alapszik Az adatfolyamok kódolják a karaktereket, az alapértelmezett karakterkódolási séma alapján. A karakterkódolás megkapható a System.getProperty("file.encoding") használatával. Új alapértelmezett kódolás megadásához létre kell hozni egy OutputStreamWriter vagy egy FileOutputStream objektumot, és megadni a kódolást.