Input/Output Daten in Datei schreiben und auslesen

jockyjoe

Mitglied
Hallo,

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:

Java:
import java.util.Scanner;
import java.io.*;

public class Buch
{
	
	public static class sBuch
	{
		String name;
		String author;
		String ISBN;
		int anzSeiten;
		byte kapitel; //Optional
	}
	
	public static void main(String[] args) throws IOException
	{
		sBuch buch1 = new sBuch();
		Scanner sc = new Scanner(System.in);

		System.out.print("Name des Buches: ");
		buch1.name = sc.nextLine();
		
		System.out.print("Name des Autors: ");
		buch1.author = sc.nextLine();
		
		System.out.print("ISBN: ");
		buch1.ISBN = sc.nextLine();
		
		String buecher = "buecher.txt"; //Zieldatei
		FileOutputStream speicherBuch = new FileOutputStream(buecher);

		for(int i = 0; i < buch1.name; i++)
		{
			speicherBuch.write((char)buch1.name.nextLine(buch1.name));
		}
		speicherBuch.close();
		System.out.println("Fertig.");
	}
}

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: String Buch.
--
java:35: error: cannot find symbol speicherBuch.write((char)name.nextLine(name)); 
^ 
symbol: variable name
location: class Buch 
--
Buch.java:35: error: cannot find symbol 
speicherBuch.write((char)name.nextLine(name)); 
^ 
symbol: variable name 
location: class Buch
--
3 errors

Ich benutze Windows 7 64bit (x64) und Java 1.7.0_09.
Wäre euch dankbar für eure Antworten :)
MfG jockyjoe
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
Du kannst einen String nicht mit < vergleichen und ein String besitzt die Methode nextLine nicht.
 
Zuletzt bearbeitet:

jockyjoe

Mitglied
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?
 

Volvagia

Top Contributor
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.
 

Volvagia

Top Contributor
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.
 

jockyjoe

Mitglied
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:
import java.util.Scanner;
import java.io.*;

public class Buch
{
	
	public static class sBuch
	{
		String name;
		String author;
		String ISBN;
		int anzSeiten;
		byte kapitel; //Optional
	}
	
	public static void main(String[] args) throws IOException
	{
		sBuch[] buch = new sBuch[200];
		Scanner sc = new Scanner(System.in);
		
		for(int i = 0; i < buch.length; i++)
		{
			buch[i] = new sBuch();
		}	
		int auswahl;
		
		String buecher = "buecher.txt"; //Zieldatei
		
		System.out.print("Daten werden in "+buecher+" geschrieben.\n"); 
		
		for(int i = 0; i < buch.length; i++)
		{
			FileWriter book = new FileWriter(buecher, true);
			PrintWriter pw = new PrintWriter(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.");
			}
			
			else if(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.");*/
	}
}

Allerdings habe ich immer noch ein Problem. Wenn ich kompiliere und "auswahl" den Wert 1 zuweise sieht das so aus:
http://www.java-forum.org/attachment.php?attachmentid=5386&stc=1&d=1353272264

die Datei sind dann so aus:
http://www.java-forum.org/attachment.php?attachmentid=5385&stc=1&d=1353272082

Ich hab echt keine Ahnung warum immer der Name des Buches übersprungen wird..
 

Anhänge

  • fehler2.png
    fehler2.png
    59,7 KB · Aufrufe: 49
  • fehler.png
    fehler.png
    59 KB · Aufrufe: 51

jockyjoe

Mitglied
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:
import java.io.*;
import java.util.Scanner;

public class Buch
{
	
	public static class sBuch
	{
		String name;
		String author;
		String ISBN;
		int anzSeiten;
		String verlag;
		float preisf; //'f' kennzeichnet einen float
	}
	
	public static void main(String[] args) throws IOException
	{
		sBuch[] buch = new sBuch[200];
		Scanner sc = new Scanner(System.in);
		
		for(int i = 0; i < buch.length; i++)
		{
			buch[i] = new sBuch();
		}	
                
		int auswahl;
		File dir = new File(System.getProperty("user.dir"));
		String buecher = "buecher.txt"; //Zieldatei
		
		System.out.print("Daten werden in "+buecher+" im Verzeichnis ("+dir+")\ngeschrieben.\n"); 
		
		for(int i = 0; i < buch.length; i++)
		{
			FileWriter book = new FileWriter(buecher, true);
			PrintWriter pw = new PrintWriter(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.");
			}
			else if(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.");*/
	}
}
 
Zuletzt bearbeitet:

jockyjoe

Mitglied
Wie benutze ich den denn? Etwa ungefähr so:
Java:
buch[i].name = sc.next().useDelimiter("");
Ich verstehe nicht wie ich dem Compiler klarmache, dass er weiter als das Leerzeichen lesen soll.
 

Volvagia

Top Contributor
Sry, ist eine Spur komplizierter als ich anfangs angenommen habe. Bin nicht umbedingt ein Fan von Scanner.

[java=20]
Scanner sc = new Scanner(System.in);
sc.useDelimiter("\r\n|[\n\r\u2028\u2029\u0085]");
[/code]
 

Volvagia

Top Contributor
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.
 

Volvagia

Top Contributor
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.
 
P

pappawinni

Gast
uah..was ist los ?

Also an der Stelle:

Java:
            FileWriter book = new FileWriter(buecher, true);
            PrintWriter pw = new PrintWriter(book, true);
            
            System.out.print("\nWas wollen Sie tun?\n" +
            "1 = Fortfahren\n2 = Beenden\nIhre Wahl: ");
            auswahl = sc.nextInt();

da wird die Zeile nicht zu Ende gelesen, sondern eben nur die hoffentlich eingegebene integer
danach würde ich vorschlagen
Code:
sc.nextLine();
, um die Zeile abzuschliessen.
Danach sollte dann auch das:
Java:
                System.out.println("Name des Buches: ");
                buch[i].name = sc.nextLine();
problemlos mit nem langen Titel aus mehreren Worten funktionieren, etwa nicht ?
 

jockyjoe

Mitglied
Jop, du hast recht pappawinni. Klappt. Aber mit
Code:
sc.next();
geht es auch ;)
Ist es eigentlich egal ob ich
Code:
sc.next();
oder
Code:
sc.nextLine();
nehme? Gibt es da Unterschiede? Vorteile/Nachteile?
 
Zuletzt bearbeitet:
T

trääät

Gast
Scanner.next() liest nur bis zum nächsten delimenter ... nextLine() sucht aber nach "\n" , "\r\n" , "\r" ... also nach dem nächsten zeilenumbruch
 
P

pappawinni

Gast
Naja, aber dafür wurde ja dann..
Code:
sc.useDelimiter("\r\n|[\n\r\u2028\u2029\u0085]");
eingesetzt.
Das macht das dann wieder gleicher...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Daten mit Apache POI in eine Excel Datei schreiben Java Basics - Anfänger-Themen 5
E Text Datei Daten Auslesen und Schreiben Java Basics - Anfänger-Themen 3
T Input/Output Daten in txt-Datei schreiben - Fehlermeldung Java Basics - Anfänger-Themen 7
S Array Daten in Binär Datei schreiben/lesen Java Basics - Anfänger-Themen 11
K Daten in eine Text datei schreiben !!!! Java Basics - Anfänger-Themen 6
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
S Daten aus eigenständiger .class-Datei abrufen Java Basics - Anfänger-Themen 1
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
T JTable Daten aus txt datei Java Basics - Anfänger-Themen 3
C Datei mit Daten einlesen und höchsten wert der zweiten Spalte ermitteln Java Basics - Anfänger-Themen 1
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
J Daten von einer PHP Datei ablesen Java Basics - Anfänger-Themen 1
R csv-Datei auslesen und ausgelesene Daten in neue csv-Datei speichern Java Basics - Anfänger-Themen 2
M Daten in CSV Datei Speichern Java Basics - Anfänger-Themen 3
A Programm mit Daten einer Datei testen Java Basics - Anfänger-Themen 4
T Speicherprobleme von daten in einer datei Java Basics - Anfänger-Themen 5
P JSP - Daten aus externer Datei auslesen und anzeigen Java Basics - Anfänger-Themen 3
S Daten aus einer JTable in eine .doc-word- datei exportieren? Java Basics - Anfänger-Themen 7
A daten in datei suchen Java Basics - Anfänger-Themen 3
M Aus .txt Datei Daten in Array speichern Java Basics - Anfänger-Themen 3
D ausgabe von daten in txt/csv datei Java Basics - Anfänger-Themen 5
M Daten in Datei speichern Java Basics - Anfänger-Themen 8
T Daten in einer Datei überschreiben Java Basics - Anfänger-Themen 13
S Daten aus txt-datei einzeln nach Spalten einlesen Java Basics - Anfänger-Themen 16
S Daten zeilenweise aus Datei einlesen Java Basics - Anfänger-Themen 7
I Daten aus Datei auslesen Java Basics - Anfänger-Themen 11
F Falsche Daten aus Datei Java Basics - Anfänger-Themen 2
S StringTokenizer: Daten aus Datei auslesen Java Basics - Anfänger-Themen 11
R ObjectOutputStream -> Daten an Datei anhängen Java Basics - Anfänger-Themen 3
B Daten aus Datei lesen und in JTable anzeigen Java Basics - Anfänger-Themen 49
T Daten aus einer .csv Datei in einen Vector einlesen Java Basics - Anfänger-Themen 3
T Unvollständige Daten in der TableView Java Basics - Anfänger-Themen 8
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
W Daten in Echtzeit übernehmen Java Basics - Anfänger-Themen 5
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
E fehlermeldung bei richtigen login daten Java Basics - Anfänger-Themen 7
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
P Schiebefix - ArrayList überschreibt Daten Java Basics - Anfänger-Themen 3
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
M Tabellen- Daten laden Java Basics - Anfänger-Themen 2
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A Literale für primitive Daten Typen Java Basics - Anfänger-Themen 4
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D Sportwetten Daten Atomatisch analysieren um optimale Strategie zu erhalten Java Basics - Anfänger-Themen 6
S Java Daten in Excel speichern Java Basics - Anfänger-Themen 1
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
M Sqlite table löschen und daten einfügen Java Basics - Anfänger-Themen 5
S Binäre-Suche bei unsortierten Daten Java Basics - Anfänger-Themen 7
N Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams Java Basics - Anfänger-Themen 9
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
A Minesweeper - Daten Java Basics - Anfänger-Themen 46
A Eingelesene Daten in Array(Liste) abspeichern? Java Basics - Anfänger-Themen 18
S Daten aus zwei Verschiedenen Tabellen in eine ArrayListe Java Basics - Anfänger-Themen 4
WPS1000 Input/Output Wie aktiviere ich den Daten Transfer von der RS232 in meine Java Applikation Java Basics - Anfänger-Themen 2
R Eigenes Protokoll zur Übermittlung von Daten zum Webserver? Java Basics - Anfänger-Themen 4
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
M jTabel mit Daten Füllen Java Basics - Anfänger-Themen 5
M Wie erzeuge ich die Differenz von zwei Daten in Stunden?? Java Basics - Anfänger-Themen 2
S Daten lesen und speichern Java Basics - Anfänger-Themen 26
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L Java Programm zum Auswerten von Daten Java Basics - Anfänger-Themen 11
H Passwortmanager, Sicherheit der Daten Java Basics - Anfänger-Themen 12
G Best Practice Wie große "Tabellen" effizient durchsuchen und Daten händeln? Java Basics - Anfänger-Themen 15
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
M Erste Schritte Speichern von mehreren Daten Java Basics - Anfänger-Themen 3
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
D NPE beim laden von Daten aus MySQL Java Basics - Anfänger-Themen 9
P Einlesen von Daten via BufferedReader Java Basics - Anfänger-Themen 4
P Methoden ausgelesene (CSV-) Daten in Liste einer anderen Klasse einlesen Java Basics - Anfänger-Themen 0
F Daten aus Excel-Tabelle in Java importieren Java Basics - Anfänger-Themen 15
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5
F Daten auf Webserver laden - wiederholen bei Fehler Java Basics - Anfänger-Themen 0
W Best Practice problemabhängige Persistentmachung von Daten Java Basics - Anfänger-Themen 6
P Daten von Internetseite auslesen Java Basics - Anfänger-Themen 10
N Daten/Formular per POST an Firefox/Browser senden Java Basics - Anfänger-Themen 7
T printf Daten aus der Tabelle in Excel übernehmen Java Basics - Anfänger-Themen 5
P zweidimensionales Array anlegen und mit DB-Daten füllen Java Basics - Anfänger-Themen 14
V Einlesen von Daten Java Basics - Anfänger-Themen 8
J TableView zeigt keine Daten an Java Basics - Anfänger-Themen 14
J Daten im Programm speichern Java Basics - Anfänger-Themen 14
N Interface Daten einem Implementierten Interface zuweisen Java Basics - Anfänger-Themen 37
O Probleme mit CSV Daten Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben