Input/Output newbile und keine Ahnung!

ocsme

Top Contributor
Guten Tag,

ich beschäftige mich derzeit schon mit dem neuen Stoff 😀
Nun schaue ich mir schon eine geraume Zeit I/O an und steige überhaupt nicht dahinter.
Kennt jemand vielleicht auch auf Deutsch ein gutes Nachschlage Werk?

Denn ich bekomme es ja nicht mal hin ein Programm zu schreiben was mir z. B. 100 Zufallszahlen ausgibt. Nun wollte ich dieses in eine Datei schreiben und dann auf der Platte speichern 😀
Doch ich bin dazu zu doof! Ich verstehe nicht wie das klappen soll. Derzeit ist unser Script noch mit dem package java.io ausgelegt. Ich weiß nicht ob sich das geändert hat und das neue package java.nio dran kommt.
Habe in der Insel angefangen nach zu lesen doch die beginnen gleich mit nio2 und ich verstehe dabei nur Bahnhof 🙁
Nun habe ich den Link hier gefunden:
http://www.highscore.de/java/aufbau/streams.html

Da werden die Klassen halbwegs ordentlich erklärt damit kann ich "etwas mehr anfangen" 🙂
Doch so wirklich schlau aus der ganzen Sache bin ich immer noch nicht geworden.

LG
 
Wo hast Du denn ein Verständnisproblem?

Also ich hab verstanden was ein Stream ist und das Java Byteorientierte und Zeichenorientiere Stream anbietet.
Ich verstehe nur einfach nicht wenn ich Daten im Programm erzeuge liegt ja alles im RAM. Wie sage ich Ihm jetzt aber erstelle eine Datei mit dem Inhalt und lege diese Datei /home/username/ ab?

Glaube das sollte so ziemlich das einfachste auf der Welt sein doch ich verstehe es nicht.

Wenn nicht lass ich das Thema weg und mach bei den Generics weiter 😀

LG
 
Wusaa

Als Buch kann ich dir zB das folgende empfehlen: ,,Programmieren lernen mit Java: Aktuell zu Java 8 und mit dem WindowBuilder - Ausgabe 2016"
 
horstiii2 das buch habe ich schon 🙂
Da ist vor allem das Problem das er sehr schnell auf die Grafische Oberfläche eingeht und I/O später. Dadurch muss ich erstmal trennen zwischen I/O und GUI 😀
Vorher habe ich das hier Buch benutzt und finde es ist einfach Hammer =)
https://www.pearson-studium.de/programmieren-mit-java.html

Dort wird die Anfangsthematik super erklärt.
Ich werde es nun so machen wie VfL_freak sagte. Werde weiter ALDA durch arbeiten und das versuchen Parallele in Java umzusetzen. Dann habe ich ja wieder Übung mit den Grundlagen von Java 😉
Die anderen Themen werde ich dann später bearbeiten und vielleicht wird ja auch das ein oder andere durch die Vorlesung verständlich 🙂 denn mit der kann ich derzeit auch nix anfangen 🙁

LG
 
Ich verstehe nur einfach nicht wenn ich Daten im Programm erzeuge liegt ja alles im RAM. Wie sage ich Ihm jetzt aber erstelle eine Datei mit dem Inhalt und lege diese Datei /home/username/ ab?
Naja, Du musst Dir natürlich überlegen, wie die Daten in der Datei dargestellt werden sollen. Oft läuft das so, dass die Daten "nacheinander" rausgeschrieben werden können. Dann nimmst Du einen (File)OutputStream oder einen (File)Writer und schreibst 🙂
 
ja genau mihe7 mit dem Teil funktioniert das und ich komme damit ja überhaupt nicht klar 😀

hier mal mein Code:
Java:
package Insel;
import java.io.*;

public class FileTestApp {

 
    public static void main(String... args) throws IOException{
        FileWriter fw = new FileWriter("ausgabe.txt");
        BufferedWriter bw = new BufferedWriter(fw);
     
        for(int i=0;i<10;i++) {
            int k = (int) (Math.random()*10+1);
            System.out.println(k);
            bw.write(k);
        }
     
        bw.close();
     
    }

}

Die ausgabe.txt sieht echt NETT aus 😀
Es stehen nur Zeichen drin die nicht angezeigt werden können.
LG

PS: Wenn man den int wert vorher zu einem String castet klappt es aber das geht sicherlich auch direkt ein int wert in eine Datei zu kopieren.
Oder zählt ein int nicht als Zeichen? das ich dann byteorientiert Kopieren müsste?
 
Zuletzt bearbeitet:
Da steht bei write(int c): Writes a single character.
Hehe dort habe ich gerade rein geschaut 😛

Ich dachte nur wenn ich ein int habe dann lässt er es als int. Doch er interpretiert es als Zeichen. (klar steht dort ja auch Zeichenorientiert aber ist eine Zahl nicht auch ein Zeichen 😛)
Jetzt habe ich aber noch eine doofe Frage.
Wieso gibt er mir bei dieser Schleife nicht jedes Zeichen in der Datei aus sondern wieder nur "Müll"?

Java:
for(int i=0;i<100;i++) {
            bw.write(i);
            bw.newLine();
        }
Er macht auch keine neue Zeile 🙁

Wenn ich das hier mache kommen 100 As raus 🙂
Java:
for(int i=0;i<100;i++) {
           bw.write(65);
           bw.newLine();
       }
 
Hier die Ausgabe bei mir:
Code:
00000000  00 0a 01 0a 02 0a 03 0a  04 0a 05 0a 06 0a 07 0a  |................|
00000010  08 0a 09 0a 0a 0a 0b 0a  0c 0a 0d 0a 0e 0a 0f 0a  |................|
00000020  10 0a 11 0a 12 0a 13 0a  14 0a 15 0a 16 0a 17 0a  |................|
00000030  18 0a 19 0a 1a 0a 1b 0a  1c 0a 1d 0a 1e 0a 1f 0a  |................|
00000040  20 0a 21 0a 22 0a 23 0a  24 0a 25 0a 26 0a 27 0a  | .!.".#.$.%.&.'.|
00000050  28 0a 29 0a 2a 0a 2b 0a  2c 0a 2d 0a 2e 0a 2f 0a  |(.).*.+.,.-.../.|
00000060  30 0a 31 0a 32 0a 33 0a  34 0a 35 0a 36 0a 37 0a  |0.1.2.3.4.5.6.7.|
00000070  38 0a 39 0a 3a 0a 3b 0a  3c 0a 3d 0a 3e 0a 3f 0a  |8.9.:.;.<.=.>.?.|
00000080  40 0a 41 0a 42 0a 43 0a  44 0a 45 0a 46 0a 47 0a  |@.A.B.C.D.E.F.G.|
00000090  48 0a 49 0a 4a 0a 4b 0a  4c 0a 4d 0a 4e 0a 4f 0a  |H.I.J.K.L.M.N.O.|
000000a0  50 0a 51 0a 52 0a 53 0a  54 0a 55 0a 56 0a 57 0a  |P.Q.R.S.T.U.V.W.|
000000b0  58 0a 59 0a 5a 0a 5b 0a  5c 0a 5d 0a 5e 0a 5f 0a  |X.Y.Z.[.\.].^._.|
000000c0  60 0a 61 0a 62 0a 63 0a                           |`.a.b.c.|
 
Hehe das macht ja super viel Spaß 🙂
Also mit dem Hex-Editor stimmen die Zahlen 🙂 er schreibt also binär jedes Bit.

Hier mal jetzt mein Code. Drei txt Dateien mit "dem selben" Inhalt 😛
Java:
package Insel;
import java.io.*;

public class FileTestApp {
    public static void main(String... args) throws IOException{
        FileWriter fw = new FileWriter("ausgabe.txt");
        BufferedWriter bw = new BufferedWriter(fw);
        BufferedWriter tw = new BufferedWriter(new FileWriter("haha.txt"));
        PrintWriter pWriter = new PrintWriter(new BufferedWriter(new FileWriter("test.txt")));
        for(int i=0;i<100;i++) {
            tw.write(i);
            tw.newLine();
            pWriter.print(i);
            bw.write(String.valueOf(i));
            bw.newLine();
        }
       
        tw.close();
        pWriter.close();
        bw.close();
       
    }
}

Danke erst einmal jetzt habe ich ja einiges an stoff was ich ausprobieren kann. So ganz verstehe ich die ganzen Klassen auf dieser Seite noch nicht und schon gar nicht wieso und wie man Streams verkettet 😀
http://www.highscore.de/java/aufbau/streams.html
 
So ganz verstehe ich die ganzen Klassen auf dieser Seite noch nicht und schon gar nicht wieso und wie man Streams verkettet
Zum "Wie": Du verkettest sie doch schon. Dein BufferedWriter nutzt unter der Haube einen FileWriter. Zum Wieso: weil bestimmte Implementierungen bestimmte Funktionalität haben. Du kannst einen PrintWriter mit allen erdenklichen Writer-Implementierungen verketten, dann kannst Du eben Methoden wie printf, println usw. nutzen.

OK, das waren jetzt Writer aber bei den Input/Output-Streams ist das genauso (nur dass diese eben nicht zeichen- sondern byteorientiert sind).
 
Nochmals vielen Lieben Dank für die Hilfe im Einstieg.
Ich werde dieses Thema jetzt zwar trotzdem hinten anstellen da ich mich erst wieder um die Algorithmen und Datenstrukturen kümmern möchte 🙂 und damit eben auch wieder die Anfänge wiederhole 🙂
Danach komme ich später sicherlich wieder auf solche fragen zurück 🙂

Vielen Vielen Lieben Dank (leider gibt es hier kein Jubel Smilie 😳 )
 

Zurück
Oben