Appearance
8. Files
3
Files auf dem Medium #
- Können gross sein. Lesen geht langsam im Vergleich zum lesen von Memory.
- Datenträger nützt sich ab (SD-Karte hat schlechtes "Wear Leveling").
- Lesen und Schreiben ist nicht rechenintensiv, hat aber lange IO Zeiten (=> blockiert UI Thread).
- File-IO wird vom OS zur Verfügung gestellt (OS versteht, wie das Medium genau beschrieben werden muss).
23.04.2023
8. Files
4
Lesen in Blöcken #
- Files können Byte um Byte gelesen werden.
- Häufig verlangt man eine grosse Menge Bytes, bekommt vom OS aber nur kleinere Segmente zurück (als
byte[]
). - Zusammensetzen dieser Bytes wird in Java von
FileReader
/BufferedReader
übernommen. - Files können Text, aber auch binäre Daten enthalten.
23.04.2023
8. Files
5
File Klasse #
- Pfad im Konstruktor übergenem
java
new File("./pfad/zum/file");
- Nesting von Files
java
new File(new File("parentDir"), "file")
23.04.2023
8. Files
6
Path Separator #
- in Windows üblicherweise
\
Backslash. - in UNIX like OS mit
/
Forward Slash.
In Java kann auch unter Windows ein /
verwendet werden.
23.04.2023
8. Files
7
Methoden der Klasse File #
Methode | |
---|---|
String file.getPath() | Relativer Pfad des Files |
String file.getAbsolutePath() | Absoluter Pfad |
String file.getName() | Filename |
boolean file.exists() | Existiert das File? |
boolean file.isDirectory() | Ist das File ein Directory? |
long file.length() | Filegrösse |
String [] file.list() | Liste von Files eines Directories |
23.04.2023
8. Files
8
Textfile: Erste Zeile eines Files lesen #
java
private void readSamples() throws IOException {
File file = new File("samples.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line = bufferedReader.readLine();
}
23.04.2023
8. Files
9
throws IOExcepetion
#
- File existiert vielleicht nicht
- Fehler passiert beim lesen
- Falsche Permissions
- ...
Fehler müssen behandelt werden, CheckedExcepetion
23.04.2023
8. Files
10
Ganzes File lesen #
java
private void readSamples() throws IOException {
File file = new File("samples.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String fileText = "";
while (true) {
String line = bufferedReader.readLine();
if (line == null) {
break;
}
fileText += line + "\n";
}
}
23.04.2023
8. Files
11
Noch kompakter #
java
private void readSamples() throws IOException {
File file = new File("samples.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String fileText = "";
String line;
while ((line = bufferedReader.readLine()) != null) {
fileText += line + "\n";
}
}
23.04.2023
8. Files
12
Aufräumen am Ende mit close
#
java
private String readSamples() throws IOException {
File file = new File("samples.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String fileText = "";
String line;
while ((line = bufferedReader.readLine()) != null) {
fileText += line + "\n";
}
bufferedReader.close();
return fileText;
}
23.04.2023
8. Files
13
String in ein File schreiben #
java
private void writeFile(String text) throws IOException {
File file = new File("samples.txt");
FileWriter fileWriter = new FileWriter(file);
BufferedWriter writer = new BufferedWriter(fileWriter);
writer.write(text);
writer.close();
}
23.04.2023
8. Files
14
Achtung ⚠️, Buffered IO #
- Bei
write
wird nicht sofort geschrieben. write
ist non-blocking (Funktionsaufruf zwar fertig, File aber nicht fertig geschrieben).close()
wartet, bis das File fertig geschrieben ist. Alternative:flush()
.
23.04.2023
8. Files
15
PrintWriter #
- Kann auch
printf
verwenden.
java
private void printIntoFile(String text) throws IOException {
File file = new File("samples.txt");
FileWriter fileWriter = new FileWriter(file);
PrintWriter writer = new PrintWriter(fileWriter);
writer.print(text);
writer.close();
}
23.04.2023
8. Files
16
Files selektieren mit JFileChooser #
java
JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showOpenDialog(parent);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());
}
23.04.2023