ich möchte gerne ein Programm schreiben, dass Eingaben von der Tastatur in eine Datei schreibt und speichert (und später auch wieder ausliest). In meinem Programm geht es um Bücher, wo man den Titel des Buches, den/die Autor/in und die ISBN eingeben soll. Da ich in Java(und in Sachen Datenströmen) ein Anfänger bin, habe ich mich hierran orientiert: In eine Datei schreiben, aus einer Datei lesen .
Code:
Die Datei "buecher.txt" liegt im gleichen Verzeichnis wie die Datei "Buch.java".
Wenn ich den Code kompiliere bekomme ich folgende Fehlermeldungen:
Java:
Buch.java:33: error: bad operand types for binary operator '<'for(int i =0; i < buch1.name; i++)^
first type:int
second type:StringBuch.--
java:35: error: cannot find symbol speicherBuch.write((char)name.nextLine(name));^
symbol: variable name
location:classBuch--Buch.java:35: error: cannot find symbol
speicherBuch.write((char)name.nextLine(name));^
symbol: variable name
location:classBuch--3 errors
Ich benutze Windows 7 64bit (x64) und Java 1.7.0_09.
Wäre euch dankbar für eure Antworten
MfG jockyjoe
Wie kann ich das denn vergleichen? Ich möchte ja nur, dass der Benutzer einen Namen eingibt und anschließend dieser Name in eine Datei namens "buecher.txt" geschrieben wird. Wie meinst du das mit nextLine()? Wie heißt die Methode dann?
Ich würde dir raten bei zeichenorientierten Werten auch zeichenbasierende Streams zu verwenden. In dem Fall FileWriter. Über die kannst du ganz einfach einen String schreiben.
Nein.
Es ist aber vorteilhaft falls lange Zeit kein Schreibevorgang statt findet, damit die Ressourcen nicht unnötig gespeert bleiben.
Falls du aber 10 Bücher hintereinander schreiben willst würde ich das in einen Vorgang machen.
Bevor ich es vergesse: Nochmal danke für deine Antworten. :toll:
Habe meinen Code ein bisschen erweitert, sodass er jetzt bis zu 200 Büchern verwalten kann (und auch in eine Datei schreiben kann).
Java:
importjava.util.Scanner;importjava.io.*;publicclassBuch{publicstaticclass sBuch
{String name;String author;String ISBN;int anzSeiten;byte kapitel;//Optional}publicstaticvoidmain(String[] args)throwsIOException{
sBuch[] buch =new sBuch[200];Scanner sc =newScanner(System.in);for(int i =0; i < buch.length; i++){
buch[i]=newsBuch();}int auswahl;String buecher ="buecher.txt";//ZieldateiSystem.out.print("Daten werden in "+buecher+" geschrieben.\n");for(int i =0; i < buch.length; i++){FileWriter book =newFileWriter(buecher,true);PrintWriter pw =newPrintWriter(book,true);System.out.print("\nWas wollen Sie tun?\n"+"1 = Fortfahren\n2 = Beenden\nIhre Wahl: ");
auswahl = sc.nextInt();if(auswahl ==1){System.out.print("Name des Buches: ");
buch[i].name = sc.nextLine();System.out.print("Name des Autors: ");
buch[i].author = sc.nextLine();System.out.print("ISBN: ");
buch[i].ISBN = sc.nextLine();
pw.println();
pw.println();
book.write("Buch Nr. "+(i+1));
pw.println();
book.write(buch[i].name);
pw.println();
book.write(buch[i].author);
pw.println();
book.write(buch[i].ISBN);
book.close();
pw.println();
pw.close();System.out.println("Fertig.");}elseif(auswahl ==2){System.out.print("Programm wird beendet.");System.exit(1);}}/*String buecher = "buecher.txt"; //Zieldatei
FileWriter book = new FileWriter(buecher, true);
PrintWriter pw = new PrintWriter(book, true);
book.write(buch[0].name);
pw.println();
book.write(buch[0].author);
pw.println();
book.write(buch[0].ISBN);
book.close();
pw.println();
pw.close();
System.out.println("Fertig.");*/}}
Habe noch eine Frage: Wieso gibt der Compiler mir eine "InputMismatchException" aus wenn ich z.B. für den Buchnnamen "Harry Potter und der Stein der Weisen" eingebe? Kann es sein, dass das zu viele Zeichen sind? Allerdings habe ich in dem Thread (http://www.java-forum.org/java-basi...ieviele-zeichen-string-maximal-speichern.html) gelesen, dass ein String maximal 2147483647 Zeichen aufnehmen kann.
Java:
importjava.io.*;importjava.util.Scanner;publicclassBuch{publicstaticclass sBuch
{String name;String author;String ISBN;int anzSeiten;String verlag;float preisf;//'f' kennzeichnet einen float}publicstaticvoidmain(String[] args)throwsIOException{
sBuch[] buch =new sBuch[200];Scanner sc =newScanner(System.in);for(int i =0; i < buch.length; i++){
buch[i]=newsBuch();}int auswahl;File dir =newFile(System.getProperty("user.dir"));String buecher ="buecher.txt";//ZieldateiSystem.out.print("Daten werden in "+buecher+" im Verzeichnis ("+dir+")\ngeschrieben.\n");for(int i =0; i < buch.length; i++){FileWriter book =newFileWriter(buecher,true);PrintWriter pw =newPrintWriter(book,true);System.out.print("\nWas wollen Sie tun?\n"+"1 = Fortfahren\n2 = Beenden\nIhre Wahl: ");
auswahl = sc.nextInt();if(auswahl ==1){System.out.print("Name des Buches: ");
buch[i].name = sc.next();System.out.print("Name des Autors: ");
buch[i].author = sc.next();System.out.print("ISBN: ");
buch[i].ISBN = sc.next();System.out.print("Anzahl der Seiten: ");
buch[i].anzSeiten = sc.nextInt();System.out.print("Verlag: ");
buch[i].verlag = sc.next();System.out.print("Preis: ");
buch[i].preisf = sc.nextFloat();
pw.println();
pw.println();
book.write("Buch: "+buch[i].name+" (Buch Nr. "+(i+1)+")");
pw.println();
book.write("Name des Buches: "+ buch[i].name);
pw.println();
book.write("Name des Autors: "+ buch[i].author);
pw.println();
book.write("ISBN: "+ buch[i].ISBN);
pw.println();
book.write("Anzahl der Seiten: "+buch[i].anzSeiten);
pw.println();
book.write("Verlag: "+ buch[i].verlag);
pw.println();
book.write("Preis: "+ buch[i].preisf);
pw.println();
book.close();
pw.println();
pw.close();System.out.println("Daten in "+buecher+" geschrieben.");}elseif(auswahl ==2){System.out.print("Programm wird beendet.");System.exit(1);}else{System.out.print("Falsche Eingabe! Exit.");System.exit(1);}}/*String buecher = "buecher.txt"; //Zieldatei
FileWriter book = new FileWriter(buecher, true);
PrintWriter pw = new PrintWriter(book, true);
book.write(buch[0].name);
pw.println();
book.write(buch[0].author);
pw.println();
book.write(buch[0].ISBN);
book.close();
pw.println();
pw.close();
System.out.println("Fertig.");*/}}
aber wie lese ich die Daten jetzt aus? :S Da ich einen FileWriter für das Schreiben der Daten verwende, müsste es auch eine FileReader für das Lesen der Daten geben, allerdings versteh ich den nicht so ganz, zumindest was die Parameter anbelangt... InputStreamReader (Java 2 Platform SE v1.4.2)) FileReader (Java 2 Platform SE v1.4.2)
Streams sind für binäre Lese/Schreibvorgänge (bytes) da. Reader/Writer für Zeichenbasierende (chars). Du kannst einen BufferedReader erzeugen, den du einen FileReader übergibst. Der kann von Haus aus mit readLine bis zum Zeilenende lesen.
Google, ein bischen lesen, viel ausprobieren, ab und zu auch fragen.
Wenn man es verwendet vergisst man es nicht mehr so leicht. (An eine #close die eine IOException throwt errinnert man sich ewig.)
Sobald du ein gröberes Grundwissen aufgebaut hast kannst du dir unter Beschreibungen etc. viel mehr vorstellen und sie assoziieren. Dann fällt das Verstehen auch viel leichter.