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(e.getMessage());
}
}
}
|
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(e.getMessage());
}
}
}
|
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.
A program kimenete
A program lefutása után a következő tartalommal rendelkező fájl jön létre:
cars.txtVolvo
BMW
Ford
Mazda
Megoldás
| 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.");
}
}
}
|
Lista készítése fájlból
Készítsünk egy cars.txt fájlt az alábbi tartalommal:
cars.txtVolvo
BMW
Ford
Mazda
Megoldás
| 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.
Megoldás
| 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.");
}
}
}
|