InputStream mit einem BufferedReader nutzen

In Java gibt es eine Klasse mit dem Namen InputStream. Wie der Name verrät handelt es sich um einen Stream für eine wie auch immer geartete Quelle von Eingangsdaten. Möchte man diesen Stream auslesen, so könnte man einen BufferedReader nutzen. Das Problem ist, das der BufferedReader keinen InputStream akzeptiert. Abhilfe schafft hier ein kleiner Umweg über den InputStreamReader:

InputStream inputStream=new InputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));

Mit dem InputStreamReader wird der InputStream in einem Reader gekapselt und kann somit in einem BufferedReader genutzt werden.

Verzeichnisse in Java rekursiv anlegen

Möchte man in Java Verzeichnisse rekursiv anlegen, so kann man hierfür das File-Objekt nutzen. Dazu muss das Objekt angelegt werden und anschließend die Methode mkdirs ausgeführt werden:

File directories = new File("/Users/seeseekey/Ordner1/Ordner2/Ordner3/");
directories.mkdirs();

Im Gegensatz zu Methode mkdir, legt die Methode mkdirs alle Verzeichnisse im übergebenen Pfad an – wenn sie noch nicht existieren sollten. Die Methode gibt dabei über einen boolean den Erfolg der Operation zurück – diesen Wert sollte man natürlich anschließend auswerten.

Auskommentierung unter IntelliJ IDEA

In der Java-IDE IntelliJ IDEA ist es wie in vielen anderen IDEs möglich ein markiertes Stück Quelltext auf Knopfdruck auszukommentieren. Der Weg führt dabei über das Menü Code. Dort gibt es den Menüpunkt Comment with Line Comment. Nutzt man eine deutsche Tasterturbelegung steht man allerdings vor einem Problem. Das Kürzel Strg + / funktioniert nicht. Über die Einstellung könnte man nun die Tastenkombination für diese Funktion ändern, damit diese wieder funktioniert.

Im Menü Code ist die Funktionalität zum Auskommentieren zu finden

Im Menü Code ist die Funktionalität zum Auskommentieren zu finden

Einfacher kann man das Problem lösen wenn man eine Tastatur mit Numpad nutzt. Dort reicht es dann Strg in Verbindung mit dem Geteiltzeichen zu drücken (welches intern ebenfalls als Slash gewertet wird). So kann die Funktionalität über die Tastatur genutzt werden, ohne die Konfiguration anzupassen.

Auto Activation unter Eclipse immer aktivieren

Wenn man mittels Eclipse in Java entwickelt, so kann man mit der Tastenkombination Strg + Space den Content Assistant aktivieren. Ich persönlich bevorzuge es wenn dieser an so vielen Stellen wie möglich aktiviert wird, da dies die Entwicklung aus meiner Sicht wesentlich komfortabler macht.

Die Auto Activation Optionen

Die Auto Activation Optionen

Dazu müssen die Einstellungen unter Window -> Preferences -> Java -> Editor -> Content Assist aufgerufen werden. Dort gibt es den Punkt Auto Activation. In das Feld Auto activation triggers for Java trägt man nun:

.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

ein und bestätigt das Ganze. Damit wird der Content Assistant immer aktiviert, was die Entwicklung beschleunigt, da man schneller an entsprechende Vorschläge kommt.

Befehlszeile mittels JewelCli unter Java auswerten

Die Methodensignatur der Standardeinsprungsmethode sieht unter Java wie folgt aus:

public static void main(String[] args)

Übergeben wird hierbei ein String-Array welches die Argumente der Befehlszeile enthält. Möchte man diese auswerten, kann man das natürlich von Hand machen. Alternativ kann man eine Bibliothek nutzen, welche einem diese Arbeit abnimmt. Eine dieser Bibliotheken ist JewelCli. JewelCli arbeitet auf Basis von Annotationen. Im ersten Schritt muss dazu ein Interface definiert werden:

public interface CommandLineOptions {
    @Unparsed
    List getFiles();

    @Option
    boolean isRecursive();

    @Option(defaultValue="localhost")
    String getDatabase();

    @Option(helpRequest = true)
    boolean getHelp();
}

In diesem Interface werden die verfügbaren Optionen über Annotationen definiert. So werden in den ersten zwei Zeilen die Unparsed-Optionen definiert. Das sind Optionen ohne Schlüssel, welche dann z.B. als Dateinamen interpretiert werden können. Die zweite Option welche im Interface definiert wird ist ein Schalter. So kann später in der Befehlszeile der Wert -recursive definiert werden, was sich auf den Wert der Rückgabe von isRecursive() auswirkt. Bei der dritten Option wird ein String übergeben welcher in der Befehlszeile mittels –database db.example.com definiert werden kann. Der Parameter ist dabei optional, so wird der Wert localhost angenommen, wenn der Wert nicht über die Befehlszeile definiert wurde. Die letzte Option dient der Implementation der Hilfe-Funktionalität. Wird der Parameter angegeben, so erzeugt JewelCli automatische die entsprechende Hilfsausgabe für die definierten Parameter. Daneben gibt es noch eine Reihe weiterer Nutzungsmöglichkeiten. Wenn das Interface definiert ist, ist der Großteil der Arbeit abgeschlossen. Nun muss die Auswertung der Parameter angestoßen werden:

CommandLineOptions result;

try {
    result = CliFactory.parseArguments(CommandLineOptions.class, args);
}
catch (ArgumentValidationException e)
{
    System.out.println(e.getMessage());
    return;
}

Dazu wird die Methode parseArguments der Klasse CliFactory genutzt, welche die Argumente unter Nutzung des definierten Interfaces auswertet. Schlägt dies fehl wird eine Exception ausgelöst und die Nachricht dieser auf der Konsole ausgegeben. Der Quelltext von JewelCli kann unter anderen auf GitHub bezogen werden. Lizenziert ist die Bibliothek unter der Apache-Lizenz und damit freie Software.