Kihagyás

Fájlkezelés

Fájl írása

A következő példában a FileWriter osztályt és annak write() metódusát használjuk szöveg írására. Ne felejtsük el, hogyha befejeztük a fájlba való írást, zárjuk be a close() metódussal, hasonlóan a Pythonban tanultakhoz.

import java.io.FileWriter;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            FileWriter writer = new FileWriter("filename.txt");
            writer.write("A fajl elso sora.\n");
            writer.close();

            System.out.println("Sikeres fajlba iras.");
        } catch (IOException e) {
            System.out.println("Hiba tortent a fajlba iras kozben.");
            e.printStackTrace();
        }
    }
}

Megjegyzés

A write() metódus nem írja automatikusan a sortörést, ezért azt külön kell megadni. Mint látható, erre a célra a \n karaktert használhatjuk, amely esetében a fordított perjelet (backslash) az AltGr+Q kombinációval készíthetünk.

Figyelmeztetés

A fenti kódrészlet automatikusan létrehozza a fájlt, amennyiben az nem létezik. Ha már létezik, akkor törli annak teljes tartalmát.

Fájl olvasása

Az előző fejezetben megtanultuk, hogyan hozhatunk létre és írhatunk fájlba.

A következő példában a Scanner osztályt használjuk az előző fejezetben létrehozott szövegfájl tartalmának olvasására:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try {
            File textFile = new File("filename.txt");
            Scanner scanner = new Scanner(textFile);

            while (scanner.hasNextLine()) {
                String data = scanner.nextLine();
                System.out.println(data);
            }

            scanner.close();
        } catch (FileNotFoundException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
    }
}

Fájl információk olvasása

Abban az esetben ha minket nem kifejezetten a fájl tartalma érdekel, hanem konkrétan a fájl tulajdonságai (pl. létrehozás dátuma, módosítás dátuma, stb.), akkor az alábbi kódrészletet tudjuk használni:

import java.io.File;

public class Main {
    public static void main(String[] args) {
        File textFile = new File("filename.txt");

        if (textFile.exists()) {
            System.out.println("File name: " + textFile.getName());
            System.out.println("Absolute path: " + textFile.getAbsolutePath());
            System.out.println("Writeable: " + textFile.canWrite());
            System.out.println("Readable: " + textFile.canRead());
            System.out.println("File size in bytes " + textFile.length());
        } else {
            System.out.println("The file does not exist.");
        }
    }
}

A program kimenete

File name: filename.txt
Absolute path: /home/user/filename.txt
Writeable: true
Readable: true
File size in bytes 52

Feladatok

Lista kiírása fájlba

Kössük össze a korábban tanultakat és írjunk egy programot, amely listában tárolt szövegeket ír ki egy fájlba.

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        // Lista létrehozása, feltöltése
        ArrayList<String> cars = new ArrayList<String>();

        cars.add("Volvo");
        cars.add("BMW");
        cars.add("Ford");
        cars.add("Mazda");

        // Fájlba írás
        try {
            FileWriter writer = new FileWriter("cars.txt");

            for (String car : cars) {
                writer.write(car + "\n");
            }

            writer.close();

            System.out.println("Sikeres fajlba iras.");
        } catch (IOException e) {
            System.out.println("Hiba tortent a fajlba iras kozben.");
        }
    }
}

A program kimenete

A program lefutása után a következő tartalommal rendelkező fájl jön létre:

cars.txt
Volvo
BMW
Ford
Mazda

Lista készítése fájlból

Készítsünk egy cars.txt fájlt az alábbi tartalommal:

cars.txt
Volvo
BMW
Ford
Mazda

Ezután beolvashatjuk a tartalmát egy listába:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try {
            ArrayList<String> cars = new ArrayList<String>();
            File textFile = new File("cars.txt");
            Scanner scanner = new Scanner(textFile);

            while (scanner.hasNext()){
                String sor = scanner.nextLine();

                cars.add(sor);
            }
            scanner.close();

            System.out.println("cars = " + cars);  // cars = [Volvo, BMW, Ford, Mazda]
        } catch (IOException e) {
            System.out.println("Hiba tortent a fajl olvasasa kozben.");
        }
    }
}

CSV beolvasás

A CS beolvasás ugyan úgy történik mint egy sima fájl beolvasása, a különbség, hogy az adott sort szét kell választani a vesszők vagy pontosvesszők mentén.

A split() metódus segítségével tudjuk szétválasztani a sort, a paraméterként megadott karakter mentén. A függvény visszatérési értéke egy tömb, amelyben a szétválasztott elemek találhatóak.

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try {
            File textFile = new File("cars.csv");
            Scanner scanner = new Scanner(textFile);

            while (scanner.hasNext()) {
                String sor = scanner.nextLine();
                System.out.println(sor);

                String[] oszlopok = sor.split(";");
                System.out.println(oszlopok[0] + " | " + oszlopok[1]);
            }
            scanner.close();
        } catch (IOException e) {
            System.out.println("Hiba tortent a fajl olvasasa kozben.");
        }
    }
}