<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://christophergusenbauer.at/feed.xml" rel="self" type="application/atom+xml" /><link href="https://christophergusenbauer.at/" rel="alternate" type="text/html" /><updated>2025-10-25T09:17:13+00:00</updated><id>https://christophergusenbauer.at/feed.xml</id><title type="html">Christopher Gusenbauer</title><subtitle>Christopher Gusenbauer ist ein oberösterreichischer IT-Berater, Unternehmer und Entwickler</subtitle><entry><title type="html">Die Zeit läuft ab.</title><link href="https://christophergusenbauer.at/kurzgeschichten/2024/09/11/zeitlaueftab.html" rel="alternate" type="text/html" title="Die Zeit läuft ab." /><published>2024-09-11T00:00:00+00:00</published><updated>2024-09-11T00:00:00+00:00</updated><id>https://christophergusenbauer.at/kurzgeschichten/2024/09/11/zeitlaueftab</id><content type="html" xml:base="https://christophergusenbauer.at/kurzgeschichten/2024/09/11/zeitlaueftab.html"><![CDATA[<p>Die Vorhänge raschelten, bewegt von einer der letzten Sommerböen dieses Jahres. Die mittlerweile schwachen Sonnenstrahlen suchten sich ihren Weg in das Zimmer, aber man konnte ihnen bereits dabei zusehen, wie sie sich langsam nach draußen zurückzogen. Es war nur das stetige Tropfen der Infusion zu hören. Einer nach dem anderen rutschte hinunter und verursachte einen kleinen Krater. Der Mann blickte auf und sah auf das EKG. Er beobachtete eine kleine Linie wie sie auf dem Bildschirm flimmerte.</p>

<p>Es kam ihm vor, als ob sie schwächer wurde, dass mit jedem Tag weniger Abstand zwischen ihren Ausschlägen lag.</p>

<p>Heute war ein guter Tag. Oft kam das nicht mehr vor. Seine Familie hatte ihn heute wieder besucht. Sein Sohn stand direkt hinter der durchaus schönen Holztür des Privatklinikzimmers, in dem er sich befand. Neben seinem Sohn stand sein Enkel Leo. Er war seinem Vater wie aus dem Gesicht geschnitten und je älter er wurde, desto mehr sah der Mann seinen Sohn in ihm. Er war glücklich, dass er Leos Reise zu einem erwachsenen Mann miterleben durfte, genauso glücklich wie ihn das Aufziehen seines Sohns gemacht hatte. Er konnte an diesem Tag zum ersten Mal seiner neugeborenen Enkelin Eva in ihr ungezeichnetes Gesicht blicken. Dabei fragte er sich, was für ein Mensch sie wohl später werden würde und welche Fehler sein Sohn machen würde in ihrer Erziehung. Auch der Mann machte selber einige, aber er wusste, dass er stolz auf seine Leistung sein konnte. Er hätte nur gern noch einmal mit seinem Lichtblick in der Dunkelheit geredet, seiner alten Liebe, der Frau die er vor 40 Jahren so stolz geheiratet hatte. Er verdankte sie dem Zufall. Auf einem Urlaub in Paris sah er sie zum ersten Mal, unter dem Eiffelturm, und wie es das Schicksal so wollte, wohnte sie nicht weit entfernt von ihm.</p>

<p>Doch sie war fort, eine schmerzvolle Tatsache. Er hatte es akzeptiert und er freute sich schon sie bald wiederzusehen.</p>

<p>Die Zeit verging schnell während er noch in Gedanken war. Die Nacht hatte bereits die letzten Sonnenstrahlen verschlungen, draußen war es stockfinster.</p>

<p>Plötzlich erloschen die Lichter der Klinik. Alles war schwarz, nur der Monitor des EKGs erleuchtete noch schwach den Raum.</p>

<p>Er war verwundert, sein Gesicht war erfüllt von Überraschung. Es war ein Gesicht voller Narben und alter Haut, aber auch mit vielen Sommersprossen und Lachfalten. Er konzentrierte sich auf das Tropfgeräusch der Infusion. Doch dann hörte er nichts mehr. Es war totenstill. Ihm kam es vor als ob die Kälte seinen Leib hinaufkriechen würde, durch die schützende Decke, seine letzte Hülle.</p>

<p>Als er zur Tür blickte kam die Erkenntnis.</p>

<p>Er war da. Sein Begleiter in eine andere Welt wartete in der offenen Tür. Er sah nicht furchterregend aus. Der Tod war einfach nur da, aber er stand nicht auf dem Boden und er berührte nichts. Er schwebte vorwärts und fror mitten in seiner Bewegung ein. Er sah dem alten Mann in die Augen. Er sah sein Leben, seine Missetaten und auch die Momente, die ihn wirklich ausmachten, die guten Taten, dieser Mann tat viele.</p>

<p>Der Körper des Greises war nicht mehr gefährlich, doch in seiner einnehmenden Ausstrahlung konnte man sehen, was für ein kraftvoller Mann er einmal war. Auch im Anblick von Gevatter Tod blieb er stark, denn er wusste, dass es Zeit war. Langsam beugte der Tod sich über ihn und hüllte ihn ein in ein wohliges Nichts, versteckt unter seinem Anschein und da lebte der alte Mann noch einmal. Er sah seine Sohn, seine Enkel und seine Familie, er sah den Bettler und andere, denen er Gutes tat und all die Menschen, die ihm dankbar waren.
Er sah seinen letzten Moment mit seiner Frau, bevor sie vorging.</p>

<p>Der Todesschlaf ist schmerzlos und weil der alte Mann mehr Gutes tat als Böses, war der Tod barmherzig und zeigte ihm auf dem Weg dorthin seine schlechten Taten nicht. Der Mann war bereit. Einen letzten Augenblick blickte er um sich, dann umschlang ihn der Tod und verschwand mit ihm dorthin, wo das danach sein sollte, dort, wo er hoffte, sie wiederzusehen.</p>

<p>In seinem Zimmer hörte man nur mehr das Tropfen einer Infusion. Auf dem schimmernden Bildschirm sah man nur mehr eine Linie, die sich kaum mehr bewegte, bis sie schließlich stoppte und der Ton des EKGs ins Nichts schrillte.</p>]]></content><author><name></name></author><category term="Kurzgeschichten" /><summary type="html"><![CDATA[Die Vorhänge raschelten, bewegt von einer der letzten Sommerböen dieses Jahres. Die mittlerweile schwachen Sonnenstrahlen suchten sich ihren Weg in das Zimmer, aber man konnte ihnen bereits dabei zusehen, wie sie sich langsam nach draußen zurückzogen. Es war nur das stetige Tropfen der Infusion zu hören. Einer nach dem anderen rutschte hinunter und verursachte einen kleinen Krater. Der Mann blickte auf und sah auf das EKG. Er beobachtete eine kleine Linie wie sie auf dem Bildschirm flimmerte.]]></summary></entry><entry><title type="html">Warum jeder etwas zu verbergen hat</title><link href="https://christophergusenbauer.at/meinung/2020/09/08/warum-jeder-etwas-zu-verbergen-hat.html" rel="alternate" type="text/html" title="Warum jeder etwas zu verbergen hat" /><published>2020-09-08T00:00:00+00:00</published><updated>2020-09-08T00:00:00+00:00</updated><id>https://christophergusenbauer.at/meinung/2020/09/08/warum-jeder-etwas-zu-verbergen-hat</id><content type="html" xml:base="https://christophergusenbauer.at/meinung/2020/09/08/warum-jeder-etwas-zu-verbergen-hat.html"><![CDATA[<p>Max Mustermann ist ein imaginärer Teamleiter in einer oberösterreichischen Versicherung. Er hat ein kleines Haus am Stadtrand von Linz, eine Frau, zwei Kinder und einen Hund. Seine Freunde würden ihn als netten, ruhigen Menschen beschreiben.</p>

<p>Er ist ein absoluter <em>Normalbürger</em>. Weder ist er ein Spion, noch arbeitet er in irgendeiner politischen oder sicherheitsrelevanten Position. Viele ganz normale Menschen werden einige Ähnlichkeiten mit ihm haben. Und dennoch hätte Max Mustermann viel zu verlieren, würde seine Privatsphäre verschwinden - was die folgenden (erfundenen) Szenarien zeigen werden.</p>

<h2 id="warum-man-kein-gläserner-bürger-sein-sollte"><strong>Warum man kein gläserner Bürger sein sollte</strong></h2>

<p>Max hat jahrelang einen schlecht qualifizierten Bekannten, dessen Frau unerwartet verstorben ist, nebenbei unter der Hand als Gärtner und Haushaltshilfe beschäftigt, um ihm über die Runden zu helfen. Jemand könnte das den falschen Leuten mitteilen und ihn damit erpressen.</p>

<p>Einmal, während einer Trennung, hat Max seiner damaligen Partnerin in einem emotionalen Moment gemeine Nachrichten geschrieben. Sie wusste, dass er es nicht ernst gemeint hat, es sofort bereute und hat es ihm nach einer Entschuldigung verziehen. Doch würden diese Nachrichten gekürzt veröffentlicht, <em>kennt die Gesellschaft den Kontext</em> <em>nicht</em> und würde ihn dafür verurteilen.</p>

<p>Seine Tochter Emma ist bereits eine erfolgreiche Anwältin und hilft täglich als ehrenamtliche Pflichtverteidigerin Menschen dabei, ihr Recht durchzusetzen. In ihrer Jugend hat sie einmal einen Fehler gemacht und in einer Boutique Kleidung gestohlen. Als Strafe des Gerichts musste sie lange Zeit in einem Altersheim aushelfen und die Verurteilung wurde dafür danach aus ihrer Akte gelöscht. Sollte das öffentlich gemacht werden, wäre Emmas Karriere in Gefahr, womit man auch Max unter Druck setzen könnte.</p>

<p>Der Sohn von Max ist noch klein und sieht in ihm seinen großen Helden. Er weiß nicht, dass Max als Kind oft gemobbt wurde und deswegen die Schule wechselte - derartige Informationen konnte Max löschen lassen, bzw. wurden sie zur damaligen Zeit gar nicht aufgezeichnet. Daher kann er seinem Sohn diesen Teil seiner Vergangenheit mitteilen, wenn er glaubt, dass der richtige Zeitpunkt dafür gekommen ist.</p>

<p>Die Ehefrau von von Max, Sarah, hat schon einmal gemeinsam mit ihm ein laszives Foto gemacht. Jemand, der sich darauf Zugriff verschafft, könnte dieses Foto veröffentlichen oder in dem sozialen Umfeld von Max verbreiten und ihn oder Sarah damit erpressen. Hätte er einmal nach gewagteren Vorlieben im Internet gesucht, könnten diese ebenfalls als Druckmittel genutzt werden.</p>

<p>Max war zufällig in der Nähe eines Banküberfalls, was durch Kameras aufgezeichnet wurde. Durch Gesichtserkennung und eine unglückliche Bewegung seinerseits wird er mit einem der Täter verwechselt. Obwohl er schnell seine Unschuld beweisen kann, bleibt der Vorfall in Datenbanken gespeichert. Bei einer zukünftigen Sicherheitsüberprüfung könnte dieser „Fehlalarm“ gegen ihn verwendet werden – etwa bei einer neuen Stelle oder einer Reise ins Ausland.</p>

<p>Max wurde vor einigen Jahren wegen einer psychischen Belastung für kurze Zeit krankgeschrieben. Er hat sich schnell erholt und nie wieder Probleme gehabt. Doch wenn seine Krankenakte öffentlich wird, könnten Arbeitgeber oder Kunden misstrauisch werden. Ein Konkurrent oder unzufriedener Kollege könnte diese Information gezielt streuen, um ihn in Verruf zu bringen oder ihn zu erpressen.</p>

<p>Max kommentiert häufig in dem Online-Forum einer Regionalzeitung anonym Beiträge mit seiner persönlichen Meinung, die er ohne den Schutz der Anonymität so nicht sagen würde, da er sich damit nicht nur Freunde gemacht hätte.</p>

<p>Er spendet regelmäßig anonym Geld z.B. an eine NGO, die sich für Flüchtlingsrechte einsetzt - er möchte allerdings seine politische Meinung privat halten, damit diese nicht mit seinem beruflichen/privaten Umfeld Konflikte schafft.</p>

<p>Über seine vergebenen Online-Kommentare, Likes, Facebook-Chats und Suchverläufe lassen sich bis ins kleinste Detail Infos über seine politische Orientierung herauslesen (welche öffentlich gemacht werden können). Mit dem Vorschlagen oder Vorenthalten von Nachrichten und Beiträgen kann er zudem von den Plattformen manipuliert werden.</p>

<p>Genauso wie jeder Bürger hat auch Max Mustermann also etwas zu verbergen und zu verlieren.</p>

<p>Am besten mit dieser Thematik kennt sich auf dieser Welt vermutlich <strong>Edward Snowden</strong> aus. Und auch von ihm stammt folgendes sehr zutreffendes Zitat:</p>

<blockquote>
  <p><em>“Zu argumentieren, dass Sie keine Privatsphäre brauchen, weil Sie nichts zu verbergen haben, ist so, als würden Sie sagen, dass Sie keine Meinungsfreiheit brauchen, weil Sie nichts zu sagen haben”.</em></p>
</blockquote>

<h2 id="das-recht-auf-einen-privaten-lebensbereich"><strong>Das Recht auf einen privaten Lebensbereich</strong></h2>

<p>Privatsphäre muss außerdem nicht unbedingt bedeuten, etwas zu verbergen – so gut wie jeder Mensch schließt bei einem privaten Gespräch die Tür des Raums, pflanzt Eiben oder Bäume an der Grenze des eigenen Gartens und zieht Rollläden zu, um den zutiefst privaten Lebensbereich vor neugierigen Blicken zu schützen. Warum sollte für das digitale Leben etwas anderes gelten? Kuscheln mit der Familie, private Gespräche und Streitereien, das gelegentliche nackte Gehen durch das Haus nach dem Duschen, Sexualität und anderes sind keine skandalösen oder verbotenen Handlungen, dennoch wollen wir nicht, dass uns fremde Augen dabei zusehen. <strong>Wer nicht will, dass der eigene Nachbar etwas mitbekommt, der kann auch nicht wollen, das fremde Personen, der Arbeitgeber oder der Staat das sehen.</strong></p>

<h2 id="die-ganz-alltägliche-folgen-der-totaldurchsichtigkeit"><strong>Die ganz alltägliche Folgen der Totaldurchsichtigkeit</strong></h2>

<p>Permanente und weit greifende Überwachung hat auch in Demokratien viele gefährliche Folgen: Die eigene Versicherungsrate könnte steigen, falls das Auto mal zu viele km/h misst. Sucht man längere Zeit online nach Hilfe gegen Depressionen, z.B. weil man eine enge Bezugsperson verloren hat, könnte man als derzeit nicht krisenresiliente Person vorgemerkt werden. Solche Daten könnten Recruiting-Firmen in Ländern mit weniger starken Datenschutzgesetzen von Google und Co. kaufen und bei Einstellungsentscheidungen nützen. Versicherungen könnten einem bestimmte Dienstleistungen verweigern, weil man in der Vergangenheit mit dem eigenen Gehalt nicht immer gut über die Runden gekommen ist. In vielen Ländern, auch <em>demokratischen</em>, passiert das bereits jetzt so oder in (noch) abgeschwächter Form jeden Tag.</p>

<h3 id="manipulation-durch-datenwissen">Manipulation durch Datenwissen</h3>

<p>Auch in liberalen Staaten gibt es eine ganz andere Gefahr: <strong>Manipulation</strong>.</p>

<p>Mit dem Wissen was Firmen wie Google, Facebook und Amazon durch Daten erhalten können sie beeinflussen, was man kaufen soll, was die Informationen, Nachrichten und Bücher sind die man erhält und theoretisch auch <em>was für Informationen einem besser vorenthalten werden</em>. Das funktioniert z. B. über Werbung, Produktvorschläge auf Amazon, vorgeschlagene Videos auf Youtube oder die selektierten Nachrichten des Google-, Facebook- oder Reddit-Algorithmus. Im US-Wahlkampf wurde das beispielsweise eingesetzt, um Wechselwähler zu überzeugen mit politisch perfekt auf den einzelnen Wähler abgestimmtem Advertising, dessen Inhalte aber nicht einmal unbedingt dem tatsächlichen Programm der jeweiligen Partei entsprachen.</p>

<h3 id="schwachstellenpotential"><strong>Schwachstellenpotential</strong></h3>

<p>Die absichtlich eingebauten Softwarefehler bzw. Schnittstellen für die Überwachung durch die Regierung haben <strong>immer</strong> auch zur Folge, dass die so erzeugten Sicherheitslücken irgendwann durch Drittparteien wie z. B. Hacker ausgenützt werden. <a href="https://www.helpnetsecurity.com/2020/05/26/backdoor-encryption/">Verschlüsselung kann z.B. technisch nicht nur für den Staat zusätzlich zu den Adressaten sichtbar sein.</a> Außerdem verschwindet sichere Verschlüsselungstechnik ja nicht, sie kann von jedem Softwareentwickler nach öffentlich verfügbaren mathematischen Anleitungen nachgebaut werden. Dennoch probieren die Staaten der 5 Eyes Geheimdienstallianz (<em>Australien, Kanada, Neuseeland, das Vereinigte Königreich und die Vereinigten Staaten</em>) <a href="https://techcrunch.com/2020/12/14/eu-council-wants-secure-encryption-and-lawful-data-access/?guccounter=1&amp;guce_referrer=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8&amp;guce_referrer_sig=AQAAAAeWLMzWZtpwocmO9bwRNR063knxbpFUpgGzWecoDp0GojXuxnmr9EuSh62A_YkcgwilDWaESu14tpYsD5cyClow2ubEwAXW36c4QBbEB_9QHkTEMtDEwqYwgOU-gJrJDEPGCwXh2tfiRflIl2qR5mfCNMMlPjCt63zbIfXBsffg">laufend</a>, in z.B. den USA und der EU die digitalen Rechte der Einwohner einzuschränken.</p>

<h2 id="fehlende-vorteile"><strong>Fehlende Vorteile</strong></h2>

<p>Kriminelle und Terroristen wissen, wie sie staatliche Kontrollen umgehen können. Meist bleiben nur nicht kriminelle Normalbürger übrig, die von der Überwachung erfasst werden. Des Weiteren hat z. B. ein unabhängiges politisches Forschungsinstitut in den USA, die New America Foundation, in einer <a href="http://www.washingtonpost.com/world/national-security/nsa-phone-record-collection-does-little-to-prevent-terrorist-attacks-group-says/2014/01/12/8aa860aa-77dd-11e3-8963-b4b654bcc9b2_story.html?hpid=z4">Studie</a>, die 255 Terrorismusfälle ausgewertet hat, herausgefunden, dass die Ermittlungen meistens durch traditionelle Strafverfolgungs- und Fahndungsmethoden angestoßen worden seien. Dagegen habe das Telefondaten-Sammeln der NSA “<em>keinen erkennbaren Einfluss auf die Verhinderung von Terrorakten gehabt</em>”.</p>

<h2 id="schlusswort"><strong>Schlusswort</strong></h2>

<p>Zu glauben, nie etwas verbergen zu haben, nie etwas zu besitzen, dass andere Leute an sich nehmen wollen oder sie neidisch macht ist ein Trugschluss. <strong>Jeder</strong> kann über seine Familie, seinen Beruf, seine Freunde oder sein Handeln bedeutend werden.</p>

<p>Und selbst wenn man ganz gewöhnlich ist: Fehler sind etwas zutiefst Menschliches. Jeder verdient es, eine zweite Chance zu bekommen und nicht sein Leben lang gebrandmarkt zu sein. Deswegen ist es wichtig die eigene Privatsphäre zu schützen.</p>

<p>Mehr über den Schutz der eigenen Privatsphäre online lernen: <a href="https://www.privacytools.io/">https://www.privacytools.io/</a></p>]]></content><author><name></name></author><category term="Meinung" /><category term="internet" /><category term="privatsphare" /><category term="sicherheit-im-internet" /><category term="uberwachung" /><category term="uberwachungsstaat" /><category term="verschlusselung" /><summary type="html"><![CDATA[Max Mustermann ist ein imaginärer Teamleiter in einer oberösterreichischen Versicherung. Er hat ein kleines Haus am Stadtrand von Linz, eine Frau, zwei Kinder und einen Hund. Seine Freunde würden ihn als netten, ruhigen Menschen beschreiben.]]></summary></entry><entry><title type="html">Dateien lesen, bearbeiten, verschieben und löschen mit Java für Anfänger</title><link href="https://christophergusenbauer.at/anleitungen/2020/05/31/dateien-lesen-schreiben-und-verschieben-in-java-fur-anfanger.html" rel="alternate" type="text/html" title="Dateien lesen, bearbeiten, verschieben und löschen mit Java für Anfänger" /><published>2020-05-31T00:00:00+00:00</published><updated>2020-05-31T00:00:00+00:00</updated><id>https://christophergusenbauer.at/anleitungen/2020/05/31/dateien-lesen-schreiben-und-verschieben-in-java-fur-anfanger</id><content type="html" xml:base="https://christophergusenbauer.at/anleitungen/2020/05/31/dateien-lesen-schreiben-und-verschieben-in-java-fur-anfanger.html"><![CDATA[<p>Als Java-Entwickler merkt man manchmal, dass das Java Ökosystem etwas verwirrend sein kann. So ist auch der Umgang mit Dateien nicht auf den ersten Blick ganz klar. Früher gab es in Java die File API, die aber mittlerweile veraltet ist. Ich war sie selbst noch gewohnt, weswegen ich mir vor kurzem selber gelernt habe und meine Erkenntnisse jetzt verschriftliche.</p>

<h2 id="die-neue-api">Die neue API</h2>

<p>Dateien/Files werden nun mit <em>java.nio.file.Path</em> und <em>java.nio.file.Files</em> bearbeitet.</p>

<h2 id="wie-pfade-funktionieren">Wie Pfade funktionieren</h2>

<p>Pfade können auf verschiedenste Arten referenziert werden, wobei die unteren drei alle das gleiche Resultat bewirken. Zu bemerken ist dabei, dass sämtliche Schreibweisen, also / oder \\ OS Independent sind. Paths können außerdem auf Files und auf Directories zeigen.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Path path= .........
Path.of("c:\\files\\pictures\\summer\\portrait.png");
Path.of("c:/files/pictures/summer/portrait.png");
Path.of("c:" , "files", "pictures", "summer", "portrait.png");
Path.of("c:" , "files", "pictures", "summer").resolve("portrait.png");
</code></pre></div></div>

<p>Dieser path ist nun eine Art Zeiger auf die Datei. Mit den Methoden von <em>Files</em> kann ich nun mit dem Pfad auch tatsächlich etwas anfangen.</p>

<p>Folgend ein paar Dinge die Common Operations darstellen:</p>

<h2 id="häufig-benutzte-funktionen-für-den-umgang-mit-dateien-in-java">Häufig benutzte Funktionen für den Umgang mit Dateien in Java</h2>

<p><strong>Erstellen von Dateien</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Files.exists(path); 
//Existiert an dieser Stelle ein File oder Directory true/false
Files.createFile(directory.resolve("readme.txt"));
//Erstellt in dem Verzeichnis/Ordner auf den der Pfad verweist die Datei //readme.txt 
Files.createDirectories(path.getParent().resolve("some/new/dir"));
//Erstellt ein Verzeichnis im Verzeichnis 
</code></pre></div></div>

<p><strong>In Dateien schreiben</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Files.writeString(filePath, "Ein String"); 
//Möchte man Encoding angeben funktioniert das über die ENUM StandardCharsets als Parameter, das Überschreibungs/Erstellungsverhalten ist über StandardOpenOption einstellbar.
</code></pre></div></div>

<p><strong>Bytes schreiben</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Files.write(filePath, "Ein String".getBytes(StandardCharsets.ISO_8859_1));
</code></pre></div></div>

<p><strong>Files/Dateien lesen</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>String s = Files.readString(filePath) //lest einen File als String ein
Stream&lt;String&gt; lines = Files.readAllLines(filePath) //Gibt mir einen Stream der einzelnen Zeilen des Files.
</code></pre></div></div>

<p><strong>Dateien verschieben</strong></p>

<p>Wichtig: Funktioniert im Sinne des ganzen Pfades inkl. Dateiname als Ziel</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Files.move(filePath, Path.of("c:\\var").resolve(filePath.getFileName().toString())); //Auch hier ist StandardCopyOption benutzbar
</code></pre></div></div>

<p><strong>Eine Datei löschen</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>try {
    Files.delete(filePath);
} catch (DirectoryNotEmptyException ex) {
    ex.printStackTrace();
}
</code></pre></div></div>

<p><strong>Ein nicht leeres Verzeichnis löschen - leere sind wie eine Datei löschbar</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>try (Stream&lt;Path&gt; walk = Files.walk(tmpDir)) {
    walk.sorted(Comparator.reverseOrder()).forEach(path -&gt; {
        try {
            Files.delete(path);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    });
}
</code></pre></div></div>

<p><strong>Alle Dateien eines Ordners ausgeben in Java</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>try (var files = Files.list(tmpDirectory)) {
    files.forEach(System.out::println);
}
</code></pre></div></div>

<h4 id="java-dateibehandlung---ein-erweitertes-beispiel-http-fileupload-über-springboot">Java Dateibehandlung - Ein erweitertes Beispiel: HTTP FileUpload über SpringBoot</h4>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@Controller
public class FileUploadController {
//Das UserHomeVerzeichnis
  public static String uploadDirectory = System.getProperty("user.dir")+"/uploads";
//Der Pfad zum Aufruf der API
 @RequestMapping("/upload")
  public String upload(@RequestParam("files") MultipartFile[] files) {
	  StringBuilder fileNames = new StringBuilder();
	  for (MultipartFile file : files) {
		  Path fileNameAndPath = Paths.get(uploadDirectory, file.getOriginalFilename());
		  fileNames.append(file.getOriginalFilename()+" ");
		  try {
			Files.write(fileNameAndPath, file.getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
	  }
	
  }
</code></pre></div></div>]]></content><author><name></name></author><category term="Anleitungen" /><summary type="html"><![CDATA[Als Java-Entwickler merkt man manchmal, dass das Java Ökosystem etwas verwirrend sein kann. So ist auch der Umgang mit Dateien nicht auf den ersten Blick ganz klar. Früher gab es in Java die File API, die aber mittlerweile veraltet ist. Ich war sie selbst noch gewohnt, weswegen ich mir vor kurzem selber gelernt habe und meine Erkenntnisse jetzt verschriftliche.]]></summary></entry><entry><title type="html">Selbstständig gemacht mit Schulpulloververkauf</title><link href="https://christophergusenbauer.at/news/2019/10/30/selbststandig-gemacht-mit-schulpulloververkauf.html" rel="alternate" type="text/html" title="Selbstständig gemacht mit Schulpulloververkauf" /><published>2019-10-30T00:00:00+00:00</published><updated>2019-10-30T00:00:00+00:00</updated><id>https://christophergusenbauer.at/news/2019/10/30/selbststandig-gemacht-mit-schulpulloververkauf</id><content type="html" xml:base="https://christophergusenbauer.at/news/2019/10/30/selbststandig-gemacht-mit-schulpulloververkauf.html"><![CDATA[<p>Gemeinsam mit meinem Kollegen Daniel Sittenthaler habe ich mich neben dem Studium selbstständig gemacht mit der Marke wear Together.<br />
Wir designen, verkaufen und vermarkten Schulpullover für Schulen in ganz Österreich.<br />
Die Pullis sind für gute Arbeitsbedingungen bei der Produktion zertifiziert, das Design &amp; der Versand ist gratis und es gibt Online-Bestellmöglichkeiten</p>

<p><a href="https://wear-together.at">Website wear Together</a></p>]]></content><author><name></name></author><category term="News" /><summary type="html"><![CDATA[Gemeinsam mit meinem Kollegen Daniel Sittenthaler habe ich mich neben dem Studium selbstständig gemacht mit der Marke wear Together. Wir designen, verkaufen und vermarkten Schulpullover für Schulen in ganz Österreich. Die Pullis sind für gute Arbeitsbedingungen bei der Produktion zertifiziert, das Design &amp; der Versand ist gratis und es gibt Online-Bestellmöglichkeiten]]></summary></entry><entry><title type="html">Angular - 5 nützliche Code-Snippets</title><link href="https://christophergusenbauer.at/anleitungen/2019/05/12/angular-5-nuetzliche-code-snippets.html" rel="alternate" type="text/html" title="Angular - 5 nützliche Code-Snippets" /><published>2019-05-12T00:00:00+00:00</published><updated>2019-05-12T00:00:00+00:00</updated><id>https://christophergusenbauer.at/anleitungen/2019/05/12/angular-5-nuetzliche-code-snippets</id><content type="html" xml:base="https://christophergusenbauer.at/anleitungen/2019/05/12/angular-5-nuetzliche-code-snippets.html"><![CDATA[<p>Viele Anwendungsfälle im Webdevelopement wiederholen sich in beinahe jedem neuen Projekt. Deswegen ist es wichtig, häufig benutzten Code nicht jedesmal neu zu schreiben, sondern ihn als Codesnippet zu speichern. Hier sind 5 praktische, kurze Codesnippets vorgestellt.</p>

<h2 id="sortieren-in-angular">Sortieren in Angular</h2>

<p>Listen, wie beispielsweise Personen sollten oft sortierbar nach z.B. dem Alphabet sein, mit folgenden Snippets lässt sich das bewerkstelligen:</p>

<p><strong>Sortieren nach Zahlen</strong></p>

<table><tbody><tr><td>return this.persons.sort((n1,n2) =&gt; n1.id - n2.id);</td></tr></tbody></table>

<p><strong>Sortieren nach String</strong></p>

<table><tbody><tr><td>return this.persons.sort((a,b) =&gt; a.firstname.localeCompare(b.firstname));</td></tr></tbody></table>

<h2 id="suchfunktion-für-die-angular-web-app-einbauen">Suchfunktion für die Angular Web-App einbauen</h2>

<p>In diesem Beispiel wird eine Liste von Personen ausgegeben, eine Person aber nur angezeigt, wenn sie mit den Kriterien der Suche übereinstimmt (also dem Nachnamen)</p>

<table><tbody><tr><td>&lt;<strong>div</strong> *ngIf="matches(person)" &gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;<strong>app-person-detail</strong> [person]="person" (deleted)="deletePerson(i)"&gt;&lt;/<strong>app-person-detail</strong>&gt;<br />&nbsp;&nbsp;&lt;/<strong>div</strong>&gt;</td></tr></tbody></table>

<table><tbody><tr><td>matches(person){<br />&nbsp;&nbsp;return (person.lastname.toUpperCase()).indexOf(this.searchstring.toUpperCase())==0||(person.firstname.toUpperCase()).indexOf(this.searchstring.toUpperCase())==0;<br />}</td></tr></tbody></table>

<h2 id="uhrzeit">Uhrzeit</h2>

<p>Auch die grundsätzlichen Funktionen der Date Klasse sollte man kennen und ein mögliches Datumsformat.</p>

<table><tbody><tr><td>var today = new Date();<br />var d = today.getDate();<br />var m = today.getMonth() + 1;<br />var y = today.getFullYear();<br />var h = today.getHours();<br />var m = today.getMinutes();<br />var s = today.getSeconds();<br />new Date('Jul 15 01:30:00 2001');</td></tr></tbody></table>

<h2 id="tabellen-in-angular-mit-objekten-befüllen">Tabellen in Angular mit Objekten befüllen</h2>

<p>Oft müssen wir Werte in Tabellen angeben und diese dynamisch verändern können. Dabei sind derartige Tabellen immer recht ähnlich aufgebaut.</p>

<p>Da das Dropdown bidirektional ist wird das aktuell selektierte Element auf die Variable actSchoolclass gespeichert. Wenn sich am Dropdown etwas verändert, so wird die Funktion getClass aufgerufen. Die leere Option wird benötigt, damit das erste Element im Dropdown leer ist, um zu verhindern, dass eine Klasse ausgewählt ist, ohne das es vom Benutzer so gewollt wurde.</p>

<p>Danach geht man die Liste an Classes in einem ngFor durch und erstellt für jede Klasse eine eigene Option.</p>

<p>Die Funktion ChangeTeacher wird aufgerufen, wenn sich im Dropdown etwas ändert. Als Parameter wird die Value des gerade ausgewählten Elements zurückgegeben. Zusätzlich muss man noch i und j übergeben, um die aktuelle Unit herausfinden zu können, um den neuen Teacher zu speichern.</p>

<p>&lt;select name=”teacher” (change)=”changeTeacher($event.target.value,i,j)”&gt;<br />
          <option></option><br />
          &lt;option *ngFor=”let t of teachers” [value]=”t.id” [selected]=”getUnit(i,j).teacher.id==t.id”&gt;<br />
            <br />
          &lt;/option&gt;<br />
        &lt;/select&gt;</p>

<h2 id="erstellen-eines-restservices"><strong>Erstellen eines RestServices</strong></h2>

<p>Um am Client Daten vom Server abfragen oder an den Server senden zu können wird mit REST kommuniziert.</p>

<table><tbody><tr><td>import { Injectable } from '@angular/core';<br />import { HttpClient } from '@angular/common/http';<br /><br />@Injectable({<br />providedIn: 'root'<br />})<br />export class RestService {<br />private http;<br />constructor(http: HttpClient) {<br />&nbsp;&nbsp;this.http = http;<br />}</td></tr></tbody></table>

<p><strong>Abfragen aller Daten einer Entity-Klasse</strong></p>

<p>Durch Anlegen einer Methode im RestService und Verwendung der jeweiligen http-Methode können bestimmte Aufrufe an den Server gesendet werden. Dazu muss lediglich der Serverlink bzw. benötigte Daten in der Methode mitgegeben werden.</p>

<table><tbody><tr><td>getAllTeacher() {<br />&nbsp;&nbsp;return this.http.get('http://localhost:8080/server/api/rest/teacher/findall');<br />}<br />getAllClasses() {<br />&nbsp;&nbsp;return this.http.get('http://localhost:8080/server/api/rest/class/findall');<br />}</td></tr></tbody></table>

<p>Beispiel: <strong>Abfragen bestimmter Daten nach einer anderen Klasse</strong></p>

<p>Um Daten abzufragen, die zu einem anderen Objekt zugehörig sind wird der Pfad der zugehörigen Serverfunktion als Parameter der http-Funktion mitgegeben. Zusätzlich wird die Id des jeweiligen Filter-Objekts mitgegeben.</p>

<table><tbody><tr><td>findByClass(id) {<br />&nbsp;&nbsp;return this.http.get('http://localhost:8080/server/api/rest/unit/findbyclass/' + id);<br />}</td></tr></tbody></table>

<p>Beispiel: <strong>Abfrage zur Speicherung eines Objekts</strong></p>

<p>Um Daten speicher zu können, müssen diese an den Server gesendet werden. Das zu speichernde Objekt wird dabei einfach als zweiter Parameter der put, oder post-Funktion im Request-Body mitgegeben. Der erste Parameter ist wieder die jeweilige URL.</p>

<table><tbody><tr><td>save(unit) {<br />&nbsp;&nbsp;return this.http.put('http://localhost:8080/server/api/rest/unit/save', unit);<br />}<br />}</td></tr></tbody></table>]]></content><author><name></name></author><category term="Anleitungen" /><category term="angular" /><category term="angular-code-snippet" /><category term="angular-datum" /><category term="angular-rest" /><category term="angular-sortieren" /><category term="angular-suchen" /><summary type="html"><![CDATA[Viele Anwendungsfälle im Webdevelopement wiederholen sich in beinahe jedem neuen Projekt. Deswegen ist es wichtig, häufig benutzten Code nicht jedesmal neu zu schreiben, sondern ihn als Codesnippet zu speichern. Hier sind 5 praktische, kurze Codesnippets vorgestellt.]]></summary></entry><entry><title type="html">Mit was für die Zentralmatura lernen?</title><link href="https://christophergusenbauer.at/anleitungen/2019/05/11/mit-was-fur-die-zentralmatura-lernen.html" rel="alternate" type="text/html" title="Mit was für die Zentralmatura lernen?" /><published>2019-05-11T00:00:00+00:00</published><updated>2019-05-11T00:00:00+00:00</updated><id>https://christophergusenbauer.at/anleitungen/2019/05/11/mit-was-fur-die-zentralmatura-lernen</id><content type="html" xml:base="https://christophergusenbauer.at/anleitungen/2019/05/11/mit-was-fur-die-zentralmatura-lernen.html"><![CDATA[<p>Jährlich stellen sich tausende Schüler der Zentralmatura und müssen den Stoff der vergangenen Jahre wieder selbst zusammenfassen. Doch im Internet gibt es viele Ressourcen, die hierbei helfen und da ich vor kurzem die schriftliche Matura hinter mich gebracht habe, hier ein paar nützliche Links und Ressourcen:</p>

<p>Allgemeine Infos und vergangene Maturen:</p>

<p><a href="https://www.srdp.at/">https://www.srdp.at/</a></p>

<p>Mathematik</p>

<p><a href="https://www.youtube.com/TheSimpleMaths">https://www.youtube.com/TheSimpleMaths</a></p>

<p><a href="https://www.youtube.com/user/beckuplearning">https://www.youtube.com/user/beckuplearning</a></p>

<p><a href="https://www.michael-leitgeb.at/srdp/index.php">https://www.michael-leitgeb.at/srdp/index.php</a></p>

<p><a href="https://lms.at/ready4matura/">https://lms.at/ready4matura/</a></p>

<p>Deutsch</p>

<p><a href="https://matura.fit/">https://matura.fit/</a></p>

<p><a href="https://www.deutsche-grammatik.net/textsorten-srdp/">https://www.deutsche-grammatik.net/textsorten-srdp/</a></p>

<p>Geschichte/Geographie</p>

<p><a href="https://www.youtube.com/channel/UCsVWpmoRsNAWZb59b6Pt9Kg">https://www.youtube.com/channel/UCsVWpmoRsNAWZb59b6Pt9Kg</a></p>

<p><a href="https://www.youtube.com/user/Webzwithaz">https://www.youtube.com/user/Webzwithaz</a></p>

<p><a href="https://www.youtube.com/user/TheSimpleHistory">https://www.youtube.com/user/TheSimpleHistory</a></p>

<p>Chemie</p>

<p><a href="https://de.khanacademy.org/science/chemistry">https://de.khanacademy.org/science/chemistry</a></p>

<p><a href="https://www.youtube.com/results?search_query=simplechemistry">https://www.youtube.com/results?search_query=simplechemistry</a></p>]]></content><author><name></name></author><category term="Anleitungen" /><category term="lernmaterial" /><category term="lernressourcen" /><category term="schule" /><category term="studium" /><category term="zentralmatura" /><category term="zusammenfassung" /><summary type="html"><![CDATA[Jährlich stellen sich tausende Schüler der Zentralmatura und müssen den Stoff der vergangenen Jahre wieder selbst zusammenfassen. Doch im Internet gibt es viele Ressourcen, die hierbei helfen und da ich vor kurzem die schriftliche Matura hinter mich gebracht habe, hier ein paar nützliche Links und Ressourcen:]]></summary></entry></feed>