Datentypen Einlesen von char in Array schlägt unerwartet fehl

Semox

Bekanntes Mitglied
Liebes Forum

Ich habe eine Funktion geschrieben, die eine Textdatei mit 15k Zeichen in entsprechend viele zerlegen soll, wenn die max. erlaubte Anzahl 5k sind. Das sollten 3 sein.

Das Problem beginnt schon beim einlesen. Mittels einer Schleife lasse ich die Datei lesen, jedoch bricht die Schleife schon nach dem 4. Zeichen ab, obwohl ich bedingte, daß die read()-Funktion bis zum Dateiende (-1) lesen soll. Warum geht es nicht, wie ich das gemacht habe?

Java:
public static void aufspalten(String file) throws IOException {
		char[] cbuf = new char[4999];
		int dateien = 0;
		int off = 0;
		int len = 4999;
		int cBufSize = 0;
		String newFiles = "";

		FileReader fr = new FileReader(file);
		FileWriter fw;

		int n = 0; // Debug Krempel

		while (fr.read(cbuf) != -1) {
			cBufSize++;
			System.out.println(cbuf[n]); // Debug Krempel
			n++;
		}

		while (fr.read(cbuf) != -1) {
			if (cBufSize <= 4999) {
				// if (cbuf.length <= 4999) {
				System.out.println("<5000 Zeichen. Abbruch.");
				break;
			} else {
				newFiles = file + ++dateien;
			}

			fw = new FileWriter(newFiles);

			if (cBufSize >= 4999) {
				// if (cbuf.length >= 4999) {
				fw.write(cbuf, off, len);
				off += 4999;
			} else {
				len -= off;
				fw.write(cbuf, off, len);
			}
		}
		fr.close();
	}

Danke Euch und Grüße,
Semo
 

Der Müde Joe

Top Contributor
>fr.read(cbuf)

Diese Zeile liest 4999 char auf einmal rein.

In diese Schleife
Java:
        // reads 4999 chars at once !!!
        while (fr.read(cbuf) != -1) {
            cBufSize++;
        }
liest du schon x Mal 4999 Zeichen ein. Also in CBufSize steht dann wiviele male du gelesen hast.
Weiter zu lesen macht dann keinen Sinn mehr, Der Stream ist leer (-1). Also beim 2ten while ist nix mehr da.

EDIT:
als Bsp:
Java:
public static void main(String... _) throws Throwable  {
    StringBuilder builder = new StringBuilder(5001);
    for(int i  = 0 ; i < 5001;i++) {
        builder.append('a');
    }
    char[] cbuf = new char[4999];
    StringReader fr = new StringReader(builder.toString());
    
    // reads 4999 chars at once !!!
    int charsReaded = 0;
    while ( (charsReaded =fr.read(cbuf)) != -1) {
        System.out.println("Read: " + charsReaded);
    }
}
 
Zuletzt bearbeitet:

Semox

Bekanntes Mitglied
Hallo MüderJoe

Danke. Ich nahm an, daß die Buchstaben einzeln gelesen würden und ich somit eine Schleife bräuchte, um eine festgelegte Anzahl in das Array aufzunehmen. :bloed:

Das ändert natürlich alles.

Gruß,
Semo
 

Semox

Bekanntes Mitglied
Hallo zusammen

Ich habe den Code umgeschrieben. Er ist denke ich schon fast fertig, aber ich verstehe nicht, warum sich dann am Ende des Prozesses die vormals mit einem Buchstaben vollgeschriebene Datei komplett leer ist und keine Zeichen geschrieben werden. Ich bitte um Euren Rat...

Java:
public static void splitCharChain(String file) throws IOException {
		int partNo = 0;
		int zeichenAnz = 0;
		String part = file;
		int c = 0;

		FileReader fr = new FileReader(file);
		FileWriter fw = new FileWriter(file);

		while ((c = fr.read()) != -1) {
			if (partNo == 0) {
				file = part + partNo;
				fw = new FileWriter(file);
				fw.write(c);
			}
		
			fw.write(c);
			zeichenAnz++;

			if (zeichenAnz == 5000) {
				fw.close();
				zeichenAnz = 0;
				partNo++;
			}
			if (zeichenAnz != 5000) {
				fw.close();
				fr.close();
			}
		}
	}

Viele Grüße,
Semo
 

Semox

Bekanntes Mitglied
Hello again,

Trotz mehrerer weiterer Versuche habe ich nicht herausgefunden, warum nun das zeichenweise kopieren nicht funktioniert. Könnte mir bitte jemand den Fehler zeigen? Das Programm läuft sauber bis an die Stelle, wo eine Datei mit 15k Zeichen gefüllt und gespeichert wird.

Bei der Zerlegung jedoch ist dann am Ende die Originaldatei leer und es wurden keine neuen Teil-Dateien erstellt.

Liegt es daran, daß es eine Überschneidung von Prozessen gibt, die die Datei zerlegen will bevor sie geschlossen wurde? Ist sowas überhaupt denkbar oder hat da das OS seine Hände drauf, daß so etwas nicht passiert?

Anbei poste ich mal den gesamten Code des Programms:

Java:
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class SplitFile {

	private static BufferedReader br = new BufferedReader(
			new InputStreamReader(System.in));

	private static String file;

	public static void fillFileChars(String file) throws IOException {
		int count = 1;
		char c = 'a';
		BufferedWriter bW = new BufferedWriter(new FileWriter(file));
		// Datenfluss: Programm --> bWriter --> FileWriter --> Datei
		while (count <= 14999) {
			bW.write(c);
			bW.flush();
			count++;
		}
		bW.close();
	}


	public static void splitCharChain(String file) throws IOException {
		int partNo = 0;
		int zeichenAnz = 0;
		String part = file;
		int c = 0;

		FileReader fr = new FileReader(file);
		FileWriter fw = new FileWriter(file);

		while ((c = fr.read()) != -1) {
			if (partNo == 0) {
				file = part + partNo;
				fw = new FileWriter(file);
				fw.write(c);
			}

			fw.write(c);
			fw.flush();
			zeichenAnz++;

			if (zeichenAnz == 5000) {
				fw.flush();
				fw.close();
				zeichenAnz = 0;
				partNo++;
			}
			if (zeichenAnz != 5000) {
				fw.flush();
				fw.close();
				fr.close();
			}
		}
	}

	public static void main(String[] args) throws IOException {
		System.out.println("****Datei mit 15k Zeichen erzeugen***");
		System.out.println("Bitte geben Sie die zu erzeugende Datei an: ");
		file = br.readLine();
		fillFileChars(file);
		System.out.println("Ok. Dieselbe Datei wird nun aufgeteilt.");
		splitCharChain(file);
		System.out.println("Fertig.");
	}
}

Danke, für Eure Hilfe.

Viele Grüße,
Semo
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C (char) Array einlesen Java Basics - Anfänger-Themen 8
Jen Array einlesen, Int und Char Java Basics - Anfänger-Themen 57
K char Einlesen und Auswerten Java Basics - Anfänger-Themen 9
B Methoden Einen Char einlesen ohne Enter abzuwarten Java Basics - Anfänger-Themen 4
B Einlesen von double und char(?) Java Basics - Anfänger-Themen 2
J Daten von einem (char*)Socket einlesen. Java Basics - Anfänger-Themen 3
0 Textdatei in Char[] einlesen ? Java Basics - Anfänger-Themen 3
ven000m Char einlesen, wie ging das nochmal? Java Basics - Anfänger-Themen 9
R char einlesen Java Basics - Anfänger-Themen 6
R char einlesen Java Basics - Anfänger-Themen 3
O Variable Zimmergrößen per scanner einlesen Java Basics - Anfänger-Themen 5
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
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
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
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
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
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
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
P Text Datei einlesen und übertragen Java Basics - Anfänger-Themen 15
E Einteilung der Räume mit einlesen einer .txt datei Java Basics - Anfänger-Themen 16
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
CptK Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
R txt Einlesen und Verarbeiten Java Basics - Anfänger-Themen 15
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
K Sonderzeichen einlesen Java Basics - Anfänger-Themen 3
L Input/Output XML Datei einlesen (JAXB?) Java Basics - Anfänger-Themen 10
F Zahlen aus Datei einlesen und in Array speichern Java Basics - Anfänger-Themen 2
I Datei einlesen Java Basics - Anfänger-Themen 11
J Best Practice [Code Verbesserung] TXT einlesen und in Arrayliste speichern Java Basics - Anfänger-Themen 5
A Ungeordnetes Array ordnen, Zahl einlesen und einordnen Java Basics - Anfänger-Themen 23
R Erste Schritte Sicheres einlesen eines Strings Java Basics - Anfänger-Themen 2
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
T Input/Output Einlesen eines .txt Files nur bei gesetztem Breakpoint möglich Java Basics - Anfänger-Themen 1
L RSA Public Key einlesen Java Basics - Anfänger-Themen 0
K Datei aus unbekannten Speicherorten einlesen Java Basics - Anfänger-Themen 1
T Datei in Array einlesen "null" Java Basics - Anfänger-Themen 8
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
J Auslesen/speichern und wieder einlesen Java Basics - Anfänger-Themen 7
N Datei Zeilenweise einlesen, Ausgabe mehrere Arrays Java Basics - Anfänger-Themen 7
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
M Einlesen von Integerwertern aus einer CSV Java Basics - Anfänger-Themen 8
? Methoden Boolean Wert vergleichen und einlesen Java Basics - Anfänger-Themen 1
K String einlesen und als Variable speichern Java Basics - Anfänger-Themen 8
K .txt einlesen und in ein Array packen Java Basics - Anfänger-Themen 2
M Erste Schritte Zahlen einlesen und auswerten Java Basics - Anfänger-Themen 6
N Best Practice CSV einlesen - Variables Array?! Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben