Braucht man für den OutputStream denn nicht die boolesche "True"-Angabe als Parameter,
wenn man den File3 "anhängen" möchte, also den vorhandenen Inhalt (File2 in File1) nicht löschen, sondern File3 nur "hinzufügen" will?
Und müsste man nicht einen Zwischenschritt machen, da der File2-Inhalt der Aufgabe nach den File1-Inhalt anscheinend ruhig überschreiben kann?
"Verschränke" ich gerade Informationen?! 🙃
FileOutputStream file1Content = new FileOutputStream(file1, true);
FileInputStream file2Content = new FileInputStream(file2);
FileInputStream file3Content = new FileInputStream(file3);
Kein "true" ?
Gelöst
Kommentare (2)
- Beliebt
- Neu
- Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Thomas
20 April, 17:06Lösung
Wenn du einen OutputStream öffnest, dann kannst du so lange in diesen Stream schreiben, bis du ihn wieder schließt. Was du bis zum Schließen des out streams machst ist dabei relativ egal. Du kannst also InputStreams öffnen und aus diesen lesen und in den OutputStream schreiben. Dann kannst du noch einen zweiten und dritten InputStream öffnen und ebenfalls in den OutputStream schreiben. Das alles wird ganz normal in den out stream geschrieben. Erst wenn du out schließt und Daten in dem File sind, erst ab diesem Zeitpunkt würde ein erneutes öffnen und schreiben die alten Daten löschen (es sei denn, du öffnest im append mode).
Das Problem, das ich bei deinem Vorgehen sehe ist folgendes.
file1 hat den Inhalt AAA, file2 BBB und file3 CCC
Öffnest du file1 in append mode, dann bleibt AAA erhalten, du schreibst CCC und dann AAA in file1, dessen Inhalt nun AAACCCBBB ist.
Genau das wird CG beim Validieren machen. Es wird mehrfache Testläufe geben. Nach dem ersten Testlauf ist in file1 CCCBBB geschrieben, das bei einem erneuten öffnen nicht gelöscht wird (da append mode) und das erwartete Resultat entspricht nicht dem Ist-Zustand, denn der hat zusätzlich den Inhalt vom vorhergehenden Durchgang.
Wie du es im Endeffekt machst ist recht egal.
OUT öffnen
IN2 öffnen -> in OUT schreiben
IN1 öffnen -> in OUT schreiben
OUT schließen
oder
IN1 öffnen -> in array1 schreiben
IN2 öffnen -> in array2 schreiben
OUT öffnen
array2 -> in OUT schreiben
array1 -> in OUT schreiben
OUT schließen
(IN1 und IN2 schließen hab ich mal einfach weggelassen)
oder, oder, oder...
Ich würde jedenfalls immer versuchen try-with-resources zu verwenden.
+2
claudia
21 April, 11:16
Vielen Dank, wie immer, Thomas, habe es verstanden.🤩
+1