Tananyag‎ > ‎Java‎ > ‎

Fájlból olvasás

Különösen nagy bemenetek esetén jól jön, ha a standard input helyett egy szöveges fájlból is be tudunk olvasni. Ezt úgy tudjuk elérni, hogy a Scanner változó felvételénél nem a standard inputot jelentő System.in-t adjuk meg, hanem egy FileInputStream-et:

import java.io.FileInputStream;
import java.util.Scanner;

public class Beolvas {
    public static void main(String[] args) {
        try {
            Scanner sc = new Scanner(new FileInputStream("fájlnév.txt"), "UTF-8");
            int i = sc.nextInt();
             // Ha a fájl elérhető

        } catch(IOException e) { // Ha fájl nem elérhető:

            System.out.println("Nem található a fájl");

        }
    }
}
  • import java.io.FileInputStream;
    import java.util.Scanner;
    Ezekre szükségünk van.
  • try {
        …
    } catch(IOException e) {
        …
    }
    Megpróbálja lefuttatni, a try-ban lévő kódot, de ha hibába ütközik, akkor átugrik a catch részbe. Muszáj kiírni, mivel számítanunk kell arra, hogy esetleg a keresett fájl nem létezik vagy nincs jogunk kiolvasni a tartalmát.
  • Scanner sc = …: létrehozunk a standard inputról való olvasáshoz hasonlóan egy objektumot, amivel később be tudunk olvasni.
  • "fájlnév.txt": A fájl neve teljes névvel, vagy rövid hivatkozással.
    Teljes név: "C:\\tmp\\asd.txt" (\\: lásd String)
    Rövid hivatkozás: "asd.txt"
    A rövid hivatkozás az aktuális mappához képest értendő, amelyben a program futtatva lett. Az IDE-kben tipikusan ez a projekt gyökérkönyvtára.
  • "UTF-8": A karakterkódolás. Elhagyható, de nem ajánlott. Ha nem szerepel karakterkódolás, akkor a Java a rendszer alapértelmezett karakterkódolását használja, ami függ az operációs rendszertől, a nyelvtől meg a csillagok állásától. Egy másik rendszeren lehet, hogy nem fog működni a program megfelelően.

Innentől kezdve az sc-t ugyanúgy használhatjuk, mint a standard inputos változatnál:

double d = sc.nextDouble(); stb

Ide kapcsolódik

Comments