Input/Output Binäres,zeilenorientiertes auslesen

S

Spellsleeper

Gast
Hallo,

kann mir jemand helfen? Mein Problem besteht darin eine TXT.Datei binär einzulesen und zur gleichen Zeit zu wissen wo das Programm im Text steht um diesen zu splitten.Ich habe es schon mit Text versucht aber leider werden die Sonderzeichen dabei immer verändert.Es folgt unten der Versuch auf Text-Ebene der so ähnlich binär durchgeführt werden muss.

Und wie gesagt mein Problem liegt nicht darin die Klasse BufferedInputStream nicht zu kennen sondern wie ich es bei der Durchführung es schaffe die Datei (im binärem Stream) an der richtigen Stelle des Textes zu trennen.Vielen Dank an alle die sich des Problems annehmen.???:L

Java:
package version1;
import java.io.*;

public class Reader {

	public void read(String oldPath) {
		String temp;
		
		boolean objectEnd=false;
		boolean realEnd=false;
		File directory=new File("C:\\NavObjekte");
		if(!directory.exists()){
		directory.mkdir();}
		Writer writer = new Writer();

		try {
			BufferedReader br = new BufferedReader(new FileReader(new File(oldPath)));
			int emptyLines = 0;
			do {
				temp = br.readLine();
				
				
				
				if (temp.equals(null)) {
					emptyLines++;
				}
				if (temp.contains("OBJECT") && !(temp.contains(" OBJECT"))) {
					objectEnd=false;
					int index1=temp.indexOf(" ");
					int index2=temp.indexOf(" ",index1+1);
					int index3=temp.indexOf(" ",index2+1);
					String temp1=temp.substring(index1, index2);
					temp1+=(temp.substring(index2,index3));
					writer.produce("C:\\NavObjekte\\" + temp1.trim()+".txt");
					System.out.println(temp1);
				}
				if (temp.contains("End."))
					
				{
					emptyLines = 0;
					objectEnd=true;
				}
				
				
				if(objectEnd==true&&emptyLines>=5){
					realEnd=true;
				}

				writer.write(temp);
				
			} while (!(realEnd==true && temp==null));
				
		} catch (FileNotFoundException fnf) {
			System.out.println("Datei konnte nicht gefunden werden(fnf).");
			fnf.printStackTrace();
		} catch (IOException e) {
			System.out.println("IO-Fehler!!!");
			e.printStackTrace();
		}finally{writer.end();}
		
	}

}
 
Zuletzt bearbeitet von einem Moderator:
G

Gastredner

Gast
Ich hätte da kurz drei Fragen:
  • Wieso redest du von "binärem Lesen", verwendest dann aber keine InputStreams?
  • Wieso schreibt deine read-Methode auf die Festplatte?
  • Was willst du damit überhaupt erreichen (vielleicht gibt es ja einen besseren Weg)?
 
Zuletzt bearbeitet von einem Moderator:
S

Spellsleeper

Gast
Also ich glaube ich habe mich ein bischen unglücklich ausgedrückt.
Hier wären dann noch mal die Fakten:
-Ich muss mehrere Objekte eines ERP-Systems aus einer TXT.Datei filtern und als einzelne TXT.Dateien ausgeben(objekt startet mit"OBJECT" und endet bei der nächsten leeren Zeile nach "END.")
-Auf Char-Basis habe ich es schon probiert aber die Sonderzeichen waren immer verändert
-Es soll bei allen Encodings klappen
-Nur wie treffe ich die Stelle zum trennen der Objekte wenn ich es über Bytepuffer einlese
 

Wildcard

Top Contributor
Die wichtigste Frage: Ist das nun wirklich binärer Inhalt? Denn nach dem was du schreibst hört es sich eher nach textuellem Inhalt an und die verwendest einfach das falsche Encoding.
Wenn es tatsächlich binärer Inhalt ist, dann brauchst du mit einem Reader gar nicht erst anzufangen.
 
S

Spellsleeper

Gast
Nein der Inhalt der Datei ist Text soll aber als ByteFormat eingelesen werden und danach ,wenn er an den richtigen Punkten gesplittet wurde auch so in die einzelnen Dateien ausgegeben werden
 
S

Spellsleeper

Gast
Ich habe es so umgesetzt wie ich es für möglich halte. Allerdings gibt mir das Programm keine Dateien in den Ordner.

Java:
package versuch2;
import java.io.*;



public class Reader {
	/*temp-aktuelle Textzeile
	 * begin-Anfangspunkt von Objekt
	 * charPos-aktueller Lesestand
	 * objectEnd-Hat der Reader schon die Position von "END." passiert
	 * 
	 */

	public static void read(String oldPath) {
		File directory = new File("C:\\NavObjekte\\Splitted");
		Writer writer =new Writer();
		if (!directory.exists()) {
			directory.mkdir();
		}
		String temp="";
		boolean objectEnd=false;
		int charPos=0;
		int begin=0;
		String fileName="";
		//input
		File file=new File(oldPath);
		try{
			InputStream is=new FileInputStream(file);
			BufferedInputStream bis=new BufferedInputStream(is);
			FileReader fr=new FileReader(file);
			BufferedReader br=new BufferedReader(fr);

			while ((temp = br.readLine()) != null) {
				charPos+=temp.length();
				if(temp.startsWith("OBJECT ")){

					objectEnd=false;
					begin=charPos-temp.length();
					int i0 = temp.indexOf(" ") + 1;
					int i1 = temp.indexOf(" ", i0 + 1);
					int i2 = temp.indexOf(" ", i1 + 1);
					fileName=temp.substring(i0, i2);
					fileName.trim();
					writer.produce("C:\\NavObjekte\\Splitted\\"+fileName+".txt");
				}
				if(temp.contains("END.")){
					objectEnd=true;
				}
				if(objectEnd==true&&temp==""){
					byte[]b=new byte[charPos-begin];
					bis.read(b, begin, charPos-begin);
					writer.write(b);
				}}
		}catch(IOException io)
		{io.printStackTrace();}
		finally{writer.end();}	
	}

}

Java:
package versuch2;
import javax.swing.*;
import javax.swing.border.BevelBorder;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GUI   {

	public static void frameSetter(){
		
		
		JFrame frame =new JFrame("NAV.txt.ObjectSplitter");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(450,140);
		frame.setBackground(Color.darkGray);
		frame.setLocationRelativeTo(null);
		frame.setResizable(false);
		frame.setLayout(null);
		Font a=new Font("Arial",Font.BOLD,20);
		//Textfield
		final JTextField entry=new JTextField();
		entry.setSize(400,30);
		entry.setBackground(Color.white);
		entry.setFont(a);
		//Button
		JButton command=new JButton("NAV-txt.Objekte Splitten");
		command.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
			String path=entry.getText();
			if(!path.contains(".txt")){
				path=path+".txt";
			}
			
			Reader.read(path);
			
			}
		});
		
		entry.setBounds(10,20,400,30);
		entry.setBorder(new BevelBorder(BevelBorder.RAISED));
		entry.setToolTipText("<html>Hier bitte den genauen Pfad der txt.Datei<br> mit den zu trennenden Objekten angeben!</html>");
		frame.getContentPane().add(entry);
		
		command.setBounds(210, 55, 200, 30);
		command.setBorder(new BevelBorder(BevelBorder.RAISED));
		frame.getContentPane().add(command);
		
		frame.setVisible(true);
		
	}		
}
Java:
package versuch2;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class Writer {
	public BufferedOutputStream x;

	public void produce(String newPath) {

		try {
			if (x != null) {
				x.flush();
				x.close();
			}
			// Kann man hier das auszugebende Format bestimmen?
			BufferedOutputStream bos = new BufferedOutputStream(
					new FileOutputStream(new File(newPath)));

			x = bos;
		} catch (IOException io) {
			io.printStackTrace();
		}

	}

	public void write(char c) {
		try {
			x.write(c);
		} catch (IOException io) {
			System.out.println("Datei konnte nicht erstellt werden(io).");
			io.printStackTrace();
		}
	}

	public void write(int n) {
		try {
			x.write(n);
		} catch (IOException io) {
			System.out.println("Datei konnte nicht erstellt werden(io).");
			io.printStackTrace();
		}
	}

	public void write(byte[] b, int s, int l) {
		try {
			x.write(b, s, l);
		} catch (IOException io) {
			System.out.println("Datei konnte nicht erstellt werden(io).");
			io.printStackTrace();
		}
	}
	public void write(byte[] b){
		try{
		x.write(b);
		}catch(IOException io){io.printStackTrace();}
	}

	public void end() {
		try {
			if (x != null) {
				x.flush();
				x.close();
			}
		} catch (IOException io) {
			io.printStackTrace();
		}
	}

}
Wie ihr seht schon ziemlich überladen
Java:
package versuch2;

public class ObjectSplitter {

	String oldPath;
	public static void main(String[] args) {
	
	GUI.frameSetter();

	}

}

So falls mir jemand beim in gang bringen helfen könnte ,das wäre super.
Bitte habt Verständnis! Dies ist bisher mein bei weitem größtes Projekt.
 
Zuletzt bearbeitet von einem Moderator:
S

Spellsleeper

Gast
Danke an alle die sich Gedanken gemacht haben, ein Freund konnte mir letztendlich helfen:
Java:
package versuch2;

import java.io.*;

public class Reader {
	/*
	 * temp-aktuelle Textzeile begin-Anfangspunkt von Objekt charPos-aktueller
	 * Lesestand objectEnd-Hat der Reader schon die Position von "END." passiert
	 */

	public static void read(String oldPath) {
		File directory = new File("C:\\NavObjekte\\Splitted");
		Writer writer = new Writer();
		if (!directory.exists()) {
			directory.mkdir();
		}
		String temp = "";
		boolean objectEnd = false;
		int charPos = 0;
		int begin = 0;
		String fileName = "";
		// input
		File file = new File(oldPath);
		try {
			InputStream is = new FileInputStream(file);
			BufferedInputStream bis = new BufferedInputStream(is);
			FileReader fr = new FileReader(file);
			BufferedReader br = new BufferedReader(fr);

			while ((temp = br.readLine()) != null) {
				if (temp.startsWith("OBJECT ")) {
					if (charPos > 0) {
						byte[] b = new byte[charPos - begin];
						int l = bis.read(b, 0, charPos - begin);
						writer.write(b, 0, l);
					}
					
					objectEnd = false;
					begin = charPos;
					// OBJECT Form 21 Customer Card
					int i0 = temp.indexOf(" ") + 1;
					int i1 = temp.indexOf(" ", i0 + 1);
					int i2 = temp.indexOf(" ", i1 + 1);
					fileName = temp.substring(i0, i2);
					fileName.trim();
					writer.produce("C:\\NavObjekte\\Splitted\\" + fileName + ".txt");
				}
				charPos += temp.length()+2;
			}
			byte[] b = new byte[charPos - begin];
			int l = bis.read(b, 0, charPos - begin);
			writer.write(b, 0, l);
		} catch (IOException io) {
			io.printStackTrace();
		} finally {
			writer.end();
		}
	}

}
 
G

Gelöschtes Mitglied 5909

Gast
Das ist ziemlich absurd was du da machst, aber solange du glücklich bist... (was vermutlich nicht lange ist)
 
S

Spellsleeper

Gast
Wenn du ein anderes Konzept vorschlägst wäre ich interessiert dieses zu erfahren.
Klar ich hab einen BufferedInputStream und einen FileInputstream auf einmal laufen das kann nicht das Optimum sein aber was schlägst du vor um dies zu verbessern?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D binäres ODER oder mehr Konstanten? Allgemeine Java-Themen 10
L Input/Output Email mit großer Pdf Anhang auslesen? Allgemeine Java-Themen 6
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
K Bildschirm auslesen/ Text erkennen Allgemeine Java-Themen 5
torresbig Url nach Webseiten-Login auslesen & Daten an Webseite senden Allgemeine Java-Themen 9
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
T INI - Einträge auslesen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
O PDF auslesen und verändern, was ist besser iText oder PDFBox ? Allgemeine Java-Themen 9
Robertop Status von Caps- und NumLock auslesen Allgemeine Java-Themen 1
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
G Mac Package auslesen Allgemeine Java-Themen 17
W Versionsnummer auslesen - Regex ist zickig Allgemeine Java-Themen 2
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
M verschiedene Dokumente auslesen Allgemeine Java-Themen 1
Gaudimagspam CSV-Datei auslesen in Java Allgemeine Java-Themen 7
L Dateien richtig auslesen Allgemeine Java-Themen 6
F WireGuard Status auslesen Allgemeine Java-Themen 3
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
I DOM-Parser - Element im Element an bestimmten Stellen auslesen Allgemeine Java-Themen 1
N Txt Datei auslesen. Allgemeine Java-Themen 5
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
V EMail, Attachments auslesen von einer Email Allgemeine Java-Themen 0
K Aus String zwei Jahreszahlen auslesen Allgemeine Java-Themen 18
E CSV mit Text und Binärdaten auslesen Allgemeine Java-Themen 7
x46 Webseite in Java auslesen Allgemeine Java-Themen 2
M Html Seite auslesen Allgemeine Java-Themen 16
S Hilfe bei dem Auslesen einer YAML Datei Allgemeine Java-Themen 8
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
B Cookie auslesen Allgemeine Java-Themen 3
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
J Daten aus Website-Quelltext auslesen Allgemeine Java-Themen 62
J Teil einer URL auslesen Allgemeine Java-Themen 13
denny86 NetBeans Ordnernamen rekursiv auslesen und in Variable verarbeiten Allgemeine Java-Themen 38
C Atfx mit Hilfe von OpenAtfx auslesen Allgemeine Java-Themen 1
C Position von Pixeln in Bilder auslesen Allgemeine Java-Themen 2
M aktive WLAN Teilnehmer auslesen? Allgemeine Java-Themen 6
X JSONObject auslesen und in HashMap hinterlegen Allgemeine Java-Themen 16
S Kann man mit Java auf einem lokalen PC/Mac Benutzergruppen auslesen und Rechte ändern? Allgemeine Java-Themen 11
C Webseite auslesen Allgemeine Java-Themen 3
D Best Practice Gesamten Bildschirminhalt auslesen und Email schicken sobald kein Pixel sich ändert Allgemeine Java-Themen 11
A Erste Schritte Daten aus einer Website auslesen Allgemeine Java-Themen 7
J Bestimmte Zeile aus Textdatei auslesen Allgemeine Java-Themen 18
G Aus JTextField Zahlen auslesen und random generieren Allgemeine Java-Themen 10
M Tastatureingabe von Sondertasten auslesen Allgemeine Java-Themen 6
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
M xlsx File auslesen Exception occured Allgemeine Java-Themen 13
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
J Auslesen Daten Java/HTML Allgemeine Java-Themen 15
4a61766120617274697374 PDF iText Wort Koordinaten auslesen Allgemeine Java-Themen 1
KeVoZ_ Bestimmte Zeile aus Console finden & auslesen Allgemeine Java-Themen 2
T Url aus txt Datei auslesen und öffnen? Allgemeine Java-Themen 4
N Werte aus Hashmap auslesen und übertragen Allgemeine Java-Themen 8
KeVoZ_ Properties mit String auslesen Allgemeine Java-Themen 11
I HTML einer Website auslesen liefert nur head Allgemeine Java-Themen 6
D Aktuell installierte Java Version auslesen unter Windows Allgemeine Java-Themen 5
M Parameter auslesen im Servlet Allgemeine Java-Themen 0
M Input/Output USB Geräteinstanzkennung auslesen Allgemeine Java-Themen 3
W 2D-Grafik Erstellungsdatum JPG direkt aus Header (EXIF) auslesen. Allgemeine Java-Themen 5
M Daten aus anderen Programmen auslesen Allgemeine Java-Themen 2
T Datei Byteweise auslesen Allgemeine Java-Themen 1
T Datentypen MNIST Datenbank auslesen (.gz) Allgemeine Java-Themen 0
T Ini Datei auslesen Allgemeine Java-Themen 3
J Temperatur aus bytes auslesen. Allgemeine Java-Themen 13
I JSoup Class auslesen Allgemeine Java-Themen 1
Bluedaishi Textdateien auslesen Allgemeine Java-Themen 12
T ELM327 OBD2 auslesen Allgemeine Java-Themen 0
D Double aus String auslesen Allgemeine Java-Themen 8
Z Zahlen aus Bild auslesen Allgemeine Java-Themen 1
A interaktives PDF auslesen/auswerten? Allgemeine Java-Themen 0
G Daten aus Website auslesen Allgemeine Java-Themen 7
S CSV Eintrag der nächsten Zeile auslesen funktioniert nicht Allgemeine Java-Themen 8
I Java FX JsonObjekt Children auslesen Allgemeine Java-Themen 23
M RXTX Details auslesen Allgemeine Java-Themen 6
N Input/Output Website Text auslesen und bestimmte Zeilen wiedergeben Allgemeine Java-Themen 4
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
J Wav-Datei aus .jar auslesen Allgemeine Java-Themen 7
J Daten aus GUI auslesen und in Objekte umwandeln Allgemeine Java-Themen 6
D CSV Datei auslesen Allgemeine Java-Themen 23
N Werte aus Arrays auslesen funktioniert nicht Allgemeine Java-Themen 5
J Java JSON-Datei aus .Zip auslesen und Download mit Progress Bar Allgemeine Java-Themen 20
V Tooltips mit Java auslesen Allgemeine Java-Themen 1
I Inhalt einer Website auslesen Allgemeine Java-Themen 6
A JTable - CellRange auslesen Allgemeine Java-Themen 2
V 2d-Barcodes mit zxing auslesen Allgemeine Java-Themen 2
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5
K Website in Programm einbinden und auslesen Allgemeine Java-Themen 2
M Image auslesen Allgemeine Java-Themen 2
S Zahlen aus (String mit zahlen) immer wieder neu auslesen Allgemeine Java-Themen 5
T datei auslesen ind der richtigen reihenfolge Allgemeine Java-Themen 2
A Probleme beim auslesen von Quelltext (HTML) Allgemeine Java-Themen 5
I Methoden Quellcode auslesen (Refelction o.ä.) Allgemeine Java-Themen 5
B Compiler-Fehler NullPointerException beim Auslesen von .lang-Datei Allgemeine Java-Themen 3
A Metadaten von Bildern auslesen und verändern Allgemeine Java-Themen 5
M InputStream auslesen Allgemeine Java-Themen 1
B Fehler beim Auslesen von Einstellungen. Zwei ähnliche Blöcke, nur eins geht. Allgemeine Java-Themen 5
I Best Practice Properties auslesen und splitten (RegExp?) Allgemeine Java-Themen 0

Ähnliche Java Themen

Neue Themen


Oben