Tabelle 15.2, 15.3, 15.4 sind wieder ein Gold-Nuggets.
Handelt es sich bei java.io.IOException
um eine geprüfte oder eine ungeprüfte Ausnahme? Weshalb?
Etwas, was keine Runtime-Exception ("dumme Programmierfehler") und kein Error (schwerwiegender Fehler) ist. Checked Exceptions (geprüfte Ausnahmen) müssen gefangen werden oder explizit weitergereicht werden.
Eine IOException
ist eine Ausnahme, deren Auftreten ausserhalb meiner Verantwortung liegt, deshalb auftreten kann und unbedingt behandelt werden muss.
Welches Konstrukt sollte man verwenden, um Ressourcen nach der Verwendung automatisch zu schließen?
try-with-resource, try (…) catch/finally
.
Geben Sie zwei Beispiele an, warum die Arbeit mit dem Dateisystem zu Exceptions führen kann.
Zum Beispiel:
-
Die Datei existiert nicht
-
Die Datei ist schreibgeschützt und kann nicht überschrieben werden
try (BufferedReader br = Files.newBufferedReader("test.txt", StandardCharsets.UTF_8)) {
// ...
}
Könnte ich nicht nach diesem Block noch einmal br.readLine()
aufrufen wollen? Weshalb kann br
direkt nach Ende der geschweiften Klammer geschlossen werden?
Innerhalb des try
-Blocks wird die Ressource angelegt und dann wieder geschlossen.
Welches gedankliche Modell liegt einer Ressource zugrunde, so dass man die Arbeit mit ihr per close
-Methode abschliesst? (edited)
In der Java-Welt haben Sie nur ein Abbild von Geräten, "Dingen" etc., die sich außerhalb der JVM befinden, wie die vom Betriebssystem Ihres Rechners verwalteten Dateien, Ausgabegeräte, Eingabegeräte usw. Dieses Abbild gleicht Java in entsprechenden Klasseninstanzen ab. Die Synchronisationspunkte gibt es nur gelegentlich mit dem Aufruf mancher Methoden. Mit close()
wird die Verbindung zur Außenwelt aufgelöst, es findet kein Austausch oder Abgleich mit der vormals assoziierten Ressource mehr statt.
Wofür brauchen Sie die Methode System.getProperty
? Nennen Sie Beispiele für Eigenschaften, die Sie mit dieser Methode auslesen können.
Zum Beispiel user.dir
, user.home
.
Was liefert in der JShell jshell> System.getProperty("user.dir")
zurück?
Es ist das Verzeichnis, in dem die JShell gestartet wurde.
Sie bekommen einen geheimen Pfad geheim
vom Typ Path
. Prüfen Sie, ob es sich dabei um ein existierendes Verzeichnis handelt und erstellen Sie dann ein neues Path
-Objekt, das auf die Datei test.jar
im Unterverzeichnis lib
dieses Verzeichnisses verweist.
Path geheim = ... ; if(File.exists(geheim) && Files.isDirectory(geheim)) { /* ... */ }
kann man verkürzen auf
if(File.isDirectory(geheim)) { /* ... */ }
Path p = geheim.resolve("lib").resolve("test.jar");
Path p2 = geheim.resolve("lib/test.jar");
Der Separator /
ist Linux-Schreibweise. Die Klasse Path
ist "clever" implementiert und kann das jedoch unabhängig vom verwendeten Betriebssystem verstehen.
Was ist ein absoluter Pfad?
Unter Windows beginnt der Pfad mit dem Laufwerksbuchstaben. Unter Linux beginnt er mit dem Slash /
.
Unter Windows entspricht System.getProperty("user.dir")
welcher Umgebungsvariablen (aubrufbar in der Kommandozeile)?
— TODO —
Mit welchem Kommando in der Windows-Kommandozeile wechseln Sie das Verzeichnis? Wie schauen Sie sich den Inhalt eines Verzeichnisses an?
-
cd
für change directory unter Windows und Linux -
dir
für directory,ls
für list unter Linux
Sie haben wieder einen geheimen Pfad geheim
, der auf eine Datei MyTest.java
verweist. Sie wissen nicht, in welchem Verzeichnis sich die Datei befindet, aber sie wissen dass es dort auch eine Datei namens MyOtherTest.java
gibt. Nennen Sie zwei Wege, wie sie einen Pfad zu dieser Datei erzeugen können.
— TODO —
Was ist eine Datei?
Auf einer Festplatte eine verteilte Ablage von Nullen und Einsen zusammen, die das Betriebssystem als logische Einheit organisiert. In Java findet sich davon dann eine objektorientierte Abbildung.
Was ist ein Verzeichnis?
Eine logische Organisationstruktor für Dateien und teils (so unter Linux) von Ressourcen. In Java bekommen wir nur objektorientierte Abbildungen davon zu sehen.
Wie muss die Signatur der Methode Paths.get
aussehen, wenn Sie beliebig viele Strings als Argumente akzeptiert?
Das ist der Varargs-Parameter.
Wie kann Paths.get
eigentlich erzwingen, dass mindestens ein Argument übergeben werden muss? Der erste Parameter ist "normal", der zweite ein Varargs-Parameter.
Path get(String first, String... more)
Was ist ein Link?
Gemeint ist der Verweis auf ein anderes Verzeichnis oder eine andere Datei,
Wie kopiert und wie verschiebt man eine Datei unter Windows von der Konsole aus?
-
copy
unter Windows,cp
unter Linux/Powershell -
move
unter Windows,mv
unter Linux/Powershell
Welche Methode der Klasse Files
liefert einen Stream
- newDirectoryStream
oder list
?
list
ist ein Stream, newDirectoryStream
eben nicht.
Schreiben Sie ein Programmfragment, das eine Textdatei zeilenweise einliest.
Im nachfolgenden Code ist inFileName
vom Typ String
.
BufferedReader inFile = new BufferedReader(new FileReader(inFileName));
while((line = inFile.readLine()) != null) {
// ...
}
inFile.close();
Diese Kurzlösung gibt kein Kodierungsformat für die einzulesende Textdatei an. Das kann in manchen Fällen wichtig und notwendig sein.
Schreiben Sie ein Programmfragment, das die Einträge eines String-Arrays als einzelne Zeilen in eine Textdatei schreibt.
Im nachfolgenden Code ist outFileName
vom Typ String
und lines
vom Typ String[]
.
BufferedWriter outFile = new BufferedWriter(new FileWriter(outFile1Name));
for(String line : lines) {
outFile.write(line);
outFile.newLine();
}
outFile.close();
Muss man immer Files.createFile
zum Anlegen einer neuen Datei verwenden, oder geht das auch einfacher?
Wenn man eine Datei zum Schreiben öffnet, wird sie angelegt, wenn sie nicht existiert.
Was bedeuten die Zahlen in UTF-8
, UTF-16
und UTF-32
Die Zahlen geben an, mit wievielen Bits das Unicode-Zeichen per default kodiert ist. Aber: ein UTF-8
(ein Byte) oder UTF-16
(zwei Bytes) bezieht gegebenenfalls nachfolgende Bytes ein, um andere UTF-32
-Zeichen darzustellen.