Einlesen einer txt von BufferedReader klappt nicht wie gewünscht

Kiesen

Mitglied
Hallo!

Ich habe folgendes Problem: Ich möchte mit Hilfe des BufferedReader eine txt mit Binärzahlen, Zeile für Zeile, einlesen und dann jede Zeile in eine Dezimalzahl umwandeln. Meine Methode, welche die Binärzahl in eine Dezimalzahl umwandelt funktioniert, wenn ich manuell einen String definiere und die Methode dann ausführe. Benutze ich jedoch den BufferedReader und übergebe den String vom BufferedReader dann der Methode, kriege ich eine NumberFormatException in Zeile 14. :( Aber ich übergebe doch nur Zahlen und keine anderen Zeichen, oder? Hier ist mein Code:

[JAVA=50]
import java.io.*;

/* Programm liest via BufferedReader(FileReader), Zeile für Zeile, eine txt ein.
* Anschließend wird versucht jede Zeile in eine Dezimalzahl umzuwandeln.
*/

public class BinaryParser {

public static int parse(String binaryString) {

try {
if (binaryString.length() < 9) {
int dezimalZahl = Integer.parseInt(binaryString,2);
System.out.print(dezimalZahl);
} else {
throw new InvalidRangeException();
}

} catch (InvalidRangeException e) {
System.out.println("The Value of the input: " + binaryString + " is too long!");
}
return 0;
}



public static void main(String [] args) throws IOException {
//String test= "00000000";
//parse(test);
BufferedReader reader = null;

try {
reader = new BufferedReader(new FileReader("BinaryFile.txt"));
String line;
while ((line = reader.readLine()) != null) {
parse(line);

}
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException i) {
throw new IOException();
}
} reader = null;
}

}
}
[/code]
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
meinst du sowas in der Art ?

Java:
 public String parse(String binaryString) throws Exception {

		  			if(Integer.valueOf(Integer.parseInt(binaryString)) <= 0x80){
	            	String dezimalZahl = Integer.toBinaryString(Integer.parseInt(binaryString));
	        
	            	return dezimalZahl;
		  			}
	            	return String.valueOf("0");
	  }
	  
	  public static void main(String[] args) {
		try {
			System.out.println(new Foo().parse("128"));
		} catch (Exception e) {
			// TODO Automatisch generierter Erfassungsblock
			e.printStackTrace();
		}
	}

[EDIT]
hast du per debugger mal geschaut mit was genau dein String beim auslesen aus der datei belegt wird ??
[/EDIT]
 
Zuletzt bearbeitet:

Kiesen

Mitglied
Das mit dem Debugger klingt nach einer guten Idee! Leider habe ich das vorher noch nie gemacht. Habe es gerade mal versucht aber da kommt auch eine eine Fehlermeldung und zwar: "Source not found" und im Detail, exception ClassNotFoundException. :Bahnhof:
Aber im Prinzip ist das was du mir an Code geschickt hast genau meine Idee, danke schonmal dafür, würde nur geratene wissen was mit dem String vom Bufferedreader passiert, bzw. womit der "gefüllt" wird.
 

kaoZ

Top Contributor
main Methode vorhanden ? ansonsten poste doch mal bitte den StackTrace, bzw die ganze Fehlermeldung

[TIPP]ich würde auch auf JUnit Tests zugreifen , die "abschnitte" auf funktionsfähigkeit prüfen :)[/TIPP]
 
Zuletzt bearbeitet:

Kiesen

Mitglied
Guten Morgen.

Dies ist die Fehlermeldung die mir ausgegeben wird, wenn ich den oben genannten Code ausführe:

Exception in thread "main" java.lang.NumberFormatException: For input string: "0"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at BinaryParser.parse(BinaryParser.java:14)
at BinaryParser.main(BinaryParser.java:37)

Dabei steht in der .txt nur eine Zeile und in dieser Zeile die null.

Will ich nun über den obigen Code mit dem Debugger (Eclipse), dann steht ganz oben:

Thread [main] (Suspended (exception Class not FoundException)) und ich werde gebeten eine Source anzugeben. Habe schon versucht meinen Projektordner als .jar zu speichern und dann als Source anzugeben, leider hat das auch nicht geholfen.

Vielen Dank, schonmal vorweg, für dein Interesse und die Hilfe!
 

kaoZ

Top Contributor
also das kling erstmal nach folgendem :.

Java:
Exception in thread "main" java.lang.NumberFormatException: For input string: "0"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at BinaryParser.parse(BinaryParser.java:14)
at BinaryParser.main(BinaryParser.java:37)

erstmal die NumberFormatException, also wird was anderes erwartet als du eingibst,

bzw. enstehen in zeile 449 / 14 / 37 / 48 Fehler ( laut der Fehlermeldung beim Parsen )

Das hier bedeutet das eine benötigte klasse die zum ausführen gebraucht wird nicht gefunden wird

Java:
Thread [main] (Suspended (exception Class not FoundException))

poste mal bitte den ganzen Source Code ohne kann man hierzu nicht viel sagen
 

Kiesen

Mitglied
Habe ich doch schon ganz oben, oder kannst du denn etwa nicht sehen?

Aber hier nochmal:
[JAVA=51]
import java.io.*;


/* Programm liest via BufferedReader(FileReader), Zeile für Zeile, eine txt ein.
* Anschließend wird versucht jede Zeile in eine Dezimalzahl umzuwandeln.
*/

public class BinaryParser {

public static int parse(String binaryString) {

try {
if (binaryString.length() < 9) {
int dezimalZahl = Integer.parseInt(binaryString,2);
System.out.print(dezimalZahl);
} else {
throw new InvalidRangeException();
}

} catch (InvalidRangeException e) {
System.out.println("The Value of the input: " + binaryString + " is too long!");
}
return 0;
}



public static void main(String [] args) throws IOException {
//String test= "00000000";
//parse(test);
BufferedReader reader = null;

try {
reader = new BufferedReader(new FileReader("BinaryFile.txt"));
String line;
while ((line = reader.readLine()) != null) {
parse(line);

}
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException i) {
throw new IOException();
}
} reader = null;
}

}
}
[/code]

Hoffe, damit wird einiges klar. ;)
 

Lars789852

Aktives Mitglied
[OT]Nur so als kleiner Tipp am Rande:

"try-with-resources" verwenden, dann brauchst du den finally Block nicht und der BufferedReader wird automatisch geschlossen:[/OT]
Java:
try (BufferedReader reader = new BufferedReader(new FileReader("BinaryFile.txt"))) {
  String line;
  while ((line = reader.readLine()) != null) {
    parse(line);
  }
}
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
So wie du das da versuchst wird das nichts...

Java:
public static void main(String [] args) throws IOException {
        //String test= "00000000";
        //parse(test);
        BufferedReader reader = null;
                
        try {
            reader = new BufferedReader(new FileReader("BinaryFile.txt"));
            String line;
            while ((line = reader.readLine()) != null) {
                    parse(line);
                
            }
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException i) {
                    throw new IOException();
                }
            } reader = null;
        }
        
    }
}

1. Du erzeugst nirgends in der main methode eine Instanz deines Parsers , welchem du ja dein String übergeben musst?!
Java:
BinaryParser parser = new BinaryParser("Hier muss dein String rein ");

2.in der Zeile hier bin ich mir sicher das es von deiner IDE rot gekennzeichnet werden sollte,

[JAVA=37]
parse(line); // bis zu diesem Zeitpunkt existiert keine BinaryParser Instanz
[/code]

selbst wenn deine Methode
Code:
parse(String s)
static ist
, müsstest du sie in Zeile 37 über Den Klassennamen aufrufen

Java:
BinaryParser.parse(String s);

Vermutlich resultiert daher auch die ClassNotFoundException , da Du die Klasse welche die statische methode beinhaltet nicht angibst, nur weil sich die main Methode in dieser Klasse befindet , musst du in dieser Trotzdem angeben aus welcher Klasse die JVM ( bzw. der Compiler ) deine Methode laden soll.

[TIPP]
Desweiteren würde ich eine Methode / oder eine Klasse Schreiben welche sich um das einlesen der Datei kümmert, und einfach nur den Inhalt an deinen Parser übergibt
[/TIPP]

[EDIT]Die Main Methode würde ich in eine eigenständige Klasse auslagern und nur zum Erzeugen einer Instanz des "FileHandlers" bzw. deines Parsers verwenden, alleine schon um eine gewisse überschaubarkeit zu wahren .[/EDIT]
 
Zuletzt bearbeitet:

Kiesen

Mitglied
Also ich habe jetzt die Main-Methode in eine separate Klasse gesteckt:

Java:
	import java.io.*;

public class ReadIn {

	public static void main(String [] args) throws IOException {
		BufferedReader reader = null;
		
				
		try {
			reader = new BufferedReader(new FileReader("BinaryFile.txt"));
			String line;
			String test = ""; 
			while ((line = reader.readLine()) != null) {			
			test = line;
			}
			
			BinaryParser.parse(test);
			
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException i) {
					throw new IOException();
				}
			} reader = null;
		}
	}
}

Ich habe also mal versucht den String den ich aus dem FileReader bekomme in einen zweiten zu stecken, aber wieder die gleiche Fehlermeldung.

Java:
Exception in thread "main" java.lang.NumberFormatException: For input string: "???0"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
	at java.lang.Integer.parseInt(Integer.java:449)
	at BinaryParser.parse(BinaryParser.java:12)
	at ReadIn.main(ReadIn.java:17)

Die Klasse BinaryParser sieht nun wie folgt aus:

Java:
public class BinaryParser {
 
	public static int parse(String binaryString) {
		
		try {
			if (binaryString.length() < 9) {
			int dezimalZahl = Integer.parseInt(binaryString,2);
			System.out.print(dezimalZahl);
			} else {
				throw new InvalidRangeException();
			}
			
		} catch (InvalidRangeException e) {
			System.out.println("The Value of the input: " + binaryString + " is too long!");
		}
		 return 0;
	}
	
}

Habe übrigens den Debugger ans laufen bekommen, weiß nur nicht wie ich auf den Inhalt des Strings sehen kann. Anscheint übergibt der BufferedReader ja noch irgendwas anderes außer der null, was nicht in ein int gecastet werden kann.
 

kaoZ

Top Contributor
Deine ganze Syntax ist irgendwie strange....und du machst es dir viel zu kompliziert , so könnte man das was du vorhast umsetzen ( funktioniert !):

man könnte das ganze auch rekursiv selbst errechnen anstatt die schon vorhandene
Code:
[B]Integer.toBinaryString();[/B]
methode zu verwenden


Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
	
	/**
	 * 
	 * @author kaoZ
	 *
	 */

 
public class BinaryParser {
 
	BufferedReader reader;
	String input;
	
	public BinaryParser(String path) throws Exception {
		reader = new BufferedReader(new FileReader(new File(path)));
		
		input = reader.readLine();
	}
	
	public String parseBinary(){
		
		int bin = Integer.parseInt(input);
		
		return String.valueOf(Integer.toBinaryString(bin));
		
		
	}
	public static void main(String[] args) {
		try {
			System.out.println(new BinaryParser("H:/Apps/Binary.txt").parseBinary());
		} catch (Exception e) {}
	}
}

Ausgabe :

10000000  // 0b128 , 128 Dezimal

[TIPP]Falls du zu dem Code eine erklärung brauchst kann ich dir die gerne geben, dieses Beispiel ist jetz für eine einzelne Zeile in einer Datei, in meinem Beispiel Befindet sich diese Datei in
Code:
H:/Apps/Binary.txt
und enthält in plain Text
Code:
128
dies führt nach Ausführung des Programmes zu der oben stehenden Ausgabe[/TIPP]

[EDIT]
wenn du es für alle Zeilen in einer Datei machen möchtest, kannst du dies wie du es bereits schon gemacht hattest in einer while-schleife einlesen und in einer ArrayList speichern , nicht in einem einzelnen String Objekt, mit einer For-schleife könnte man dann über alle einträge iterieren und für jeden eintrag die methode aufrufen
[/EDIT]
 
Zuletzt bearbeitet:

Kiesen

Mitglied
Ah, ich glaube jetzt habe ich es auch verstanden. Super, vielen Dank, hast mir wirklich sehr geholfen!
Funktioniert nun bei mir und verstanden habe ich es jetzt auch. ;)

Schönen Abend noch!
Kiesen
 

X5-599

Top Contributor
Also ich habe deinen ersten Code bei mir ausprobiert und keinen Fehler bekommen. Er funktioniert genauso wie du ihn gepostet hast.

Ach und wenn du eine statische methode in der selben Klasse aufrufen möchtest in der du gerade bist, brauchst du nicht unbedingt den Klassennamen.methodenNamen() schreiben. Der Methoden name reicht völlig aus...

Kannst du den Fehler reproduzieren? Wenn ja, gibt den binaryString mal mit System.out.print() aus. Bevor versucht wird mit Integer.parseInt() zu parsen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
E Einteilung der Räume mit einlesen einer .txt datei Java Basics - Anfänger-Themen 16
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
M Einlesen von Integerwertern aus einer CSV Java Basics - Anfänger-Themen 8
P Methoden ausgelesene (CSV-) Daten in Liste einer anderen Klasse einlesen Java Basics - Anfänger-Themen 0
N gerichteter Graph aus einer Datei einlesen Java Basics - Anfänger-Themen 21
J Encoding Problem beim Einlesen einer txt Datei mit Umlauten Java Basics - Anfänger-Themen 3
D Einlesen funktioniert an einer Stelle nicht und ich kann mir nicht erklären warum Java Basics - Anfänger-Themen 6
S Programm zum Einlesen einer Zahl und Ausgabe der Wurzel Java Basics - Anfänger-Themen 13
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
S Input/Output einlesen aus einer evtl. leeren Datei Java Basics - Anfänger-Themen 5
K Methoden Einlesen einer unbegrenzten Matrix über Konsole Java Basics - Anfänger-Themen 6
O Einlesen einer Matrix von der Console Java Basics - Anfänger-Themen 18
A CSV Zeilenweise einlesen und in einer HashMap speichern Java Basics - Anfänger-Themen 12
J Variablen Problem beim einlesen einer Zahl Java Basics - Anfänger-Themen 7
T csv einlesen, nutzen einer direkten speicherort eingabe Java Basics - Anfänger-Themen 2
C Spalte einer Textdatei einlesen Java Basics - Anfänger-Themen 10
M Methoden Daten aus einer SQL-Abfrage in eine mehrdimensionales Array einlesen Java Basics - Anfänger-Themen 7
L Problem beim Einlesen einer Datei in einen String Java Basics - Anfänger-Themen 12
O Einlesen einer "config.ini" funktioniert plötzlich nicht mehr ! Java Basics - Anfänger-Themen 10
J byteweise Einlesen einer Datei "Von.. bis.." Java Basics - Anfänger-Themen 3
J Einlesen/Speichern von Strings aus einer Datei Java Basics - Anfänger-Themen 15
H Einlesen einer CSV-Datei Java Basics - Anfänger-Themen 2
S Einlesen einer Datei? Java Basics - Anfänger-Themen 9
H Datei einlesen in einer MVC Anwendung Java Basics - Anfänger-Themen 3
E Einlesen einer int und speichern in einem Array Java Basics - Anfänger-Themen 7
B einlesen einer variable im laufenden programm Java Basics - Anfänger-Themen 5
R JSP: Ausgabe einer entfernten Webseite in Variable einlesen Java Basics - Anfänger-Themen 2
H Problem beim Einlesen einer Datei (Endlosschleife ?) Java Basics - Anfänger-Themen 3
T Problem beim Einlesen einer Datei Java Basics - Anfänger-Themen 3
B Problem beim einlesen einer Textdatei Java Basics - Anfänger-Themen 3
V Quelltext einer Homepage einlesen Java Basics - Anfänger-Themen 12
F Einlesen einer URL per Konsole Java Basics - Anfänger-Themen 15
S Einlesen des Datums in einer Zeile. Java Basics - Anfänger-Themen 16
S Einlesen einer Datei und ins Array speichern Java Basics - Anfänger-Themen 11
G Inhalt einer Textdatei in ein Array einlesen Java Basics - Anfänger-Themen 2
M Einlesen einer CSV-Datei Java Basics - Anfänger-Themen 3
D Probleme mit dem Einlesen einer Datei Java Basics - Anfänger-Themen 11
T Daten aus einer .csv Datei in einen Vector einlesen Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
S SeriellenPort einlesen Java Basics - Anfänger-Themen 3
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
S JSON einlesen und benutzen Java Basics - Anfänger-Themen 5
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
sserio Txt Datei einlesen Java Basics - Anfänger-Themen 9
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
G JSP Textfeld einlesen Java Basics - Anfänger-Themen 2
M Einlesen > new Leser Java Basics - Anfänger-Themen 5
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
A Array einlesen und ausgeben Java Basics - Anfänger-Themen 13
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
S CSV einlesen und mit Komma trennen Java Basics - Anfänger-Themen 12
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
I Java-Wort einlesen und ausgeben Java Basics - Anfänger-Themen 7
J Csv-Datei einlesen Java Basics - Anfänger-Themen 52
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
L Datein einlesen Java Basics - Anfänger-Themen 1
E Input/Output Datei anhand von Dateinamen einlesen Java Basics - Anfänger-Themen 5
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
P Datei einlesen und zurückgeben Java Basics - Anfänger-Themen 5
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
M Einzelzeichen einlesen Java Basics - Anfänger-Themen 2
C (char) Array einlesen Java Basics - Anfänger-Themen 8
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
E Mehrere Eingabezeilen gleichzeitig einlesen Java Basics - Anfänger-Themen 7
B HTML Datei einlesen und HTML Code in String wandeln Java Basics - Anfänger-Themen 19
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
P Text Datei einlesen und übertragen Java Basics - Anfänger-Themen 15
P Array einlesen von Konsole Java Basics - Anfänger-Themen 8
D Eingaben in String Array einlesen Java Basics - Anfänger-Themen 12
B CSV einlesen - Parameter a) encoding b) delimiter Java Basics - Anfänger-Themen 7
R Compiler-Fehler Einlesen von Konsolenparameter funtioniert nichtmehr Java Basics - Anfänger-Themen 4
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
H Einlesen Java Basics - Anfänger-Themen 8
H Einlesen von Zahlen Java Basics - Anfänger-Themen 20
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben