gezieltes lesen/schreiben in datei

Status
Nicht offen für weitere Antworten.

tmp

Mitglied
hallo!

und zwar bräuchte ich mal einen ratschlag.
ich habe eine ca. 200mb große datei,gefüllt mit zeilen der form
"100 101 102 103 104 105 106 107 108 0"

ich möchte nun diese datei nehmen und alle zeilen anfassen und darin daten ändern.
da ich aufgrund der dateigröße die zeilen nicht in eine string variable schreiben,ändern und in eine neue datei schreiben kann,hatte ich nun vor zeilen direkt mit random acces write anzusprechen.

also:
lies zeile x,ändere zeile x, ersetze in zeile x.

das wird dann für jede zeile durchgefüht.
wie würdet ihr das machen?

vielen dank schon mal!
 

Quaxli

Top Contributor
Und Dein konkretes Problem? Du hast es doch schon gesagt: Zeile lesen, ändern, zurückschreiben.
Ob Du das mit einem RandomAccessFile machst oder mit einem Stream ist zumindest teilweise subjektiv.

Übrigens:

da ich aufgrund der dateigröße die zeilen nicht in eine string variable schreiben,ändern und in eine neue datei schreiben

Du mußt ja nicht gleich die ganze Datei in einen String packen. Was spricht dagegen bei einem Input-Stream bis zum nächsten CRLF zu lesen? Die Abfrage ist halt etwas weniger bequem als bei RandomAccessFile, aber prinzipiell würde ich einen Input- und einen Output-Stream nehmen und das darüber abfackeln.
 

tmp

Mitglied
Code:
File f = new File( "CNF/test.cnf" );
		byte buffer[] = new byte[ (int) f.length() ];
		FileInputStream in = null;

		try
		{
			in = new FileInputStream( f );
			int len = in.read( buffer, 0, (int) f.length() );
			String str = new String( buffer, 0, len );
			System.out.println( str + " stop" );		    	  
		      
		}
		    
		catch ( IOException e ) { System.out.println( e ); }

		finally { try { if ( in != null ) in.close();} catch (IOException e) {}		    }

das liest nun meine komplette datei ein.
ich will aber immer nur eine zeile einlesen und auch gleich wieder schreiben,nachdem ich sie bearbeitet habe.

mein problem ist,dass ich nicht weiss wie ich immer nur eine zeile einlese und nach bearbeitung die selbe zeile wieder schreibe (diese zeile kann nach bearbeitung auch weniger zeichen enthalten)

ich hab es schon mit for schleifen versucht (also alle zeichen lesen,bis "\n" dabei ist und die länge merken etc)
aber das hat nicht geklappt.

habt ihr einen besseren vorschlag?
 

Quaxli

Top Contributor
Zum Beispiel so (mal schnell geschnitzt, in Teilen u. U. verbesserungswürdig):

Code:
import java.io.*;

public class Test {

	File fin;
	File fout;
	FileInputStream fis;
	FileOutputStream fos;

	int i = 0;

	public static void main(String[] args) {
		new Test();
	}

	public Test() {

		createStreams();

		StringBuffer sb = new StringBuffer();

		try {
			
			do {

				i = fis.read();

  			sb.append((char) i);
  			
				if (i == 10) {
          String line = modifyLine(sb);
          writeLine(line);
          sb = new StringBuffer();
          
				}

			} while (i != -1);

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		closeStreams();
		
		System.out.println("fertig");

	}

	private void createStreams() {

		fin = new File("C:\\readme.txt");
		fout = new File("C:\\writeme.txt");
		
		try {
			fis = new FileInputStream(fin);
			fos = new FileOutputStream(fout);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		

	}
	
	private void closeStreams(){
		try {
			fis.close();
			fos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	private String modifyLine(StringBuffer change){
		//mach irgendwas
		return change.toString().replaceAll("Z", "Ts"); 
	}

	private void writeLine(String s){
		try {
			fos.write(s.getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Ich habe es kaum kommentiert - mit Absicht. Du sollst dabei schließlich auch was lernen. ;)
Und wenn Du was nicht verstehst, schau es nach, z. B. im Tutorial unter www.javabuch.de
 

solnze

Aktives Mitglied
ausm kopf...

Code:
File f = new File( "CNF/test.cnf" );
File f2 = new File( "CNF/testC.cnf" );
           FileInputStream in = null;
LineNumberReader lnr = null;
String line = null;
FileWriter fw=null;
      try
      {
fw = new FileWriter(f2);
         in = new FileInputStream( f );
lnr = new LineNumberReader(in);
while((line=lnr.readLine())!=null)
System.out.println("preChange:"+line);
//do something with line
System.out.println("pastChange:"+line);
fw.write(line+"\n");
           
      }
         
      catch ( IOException e ) { System.out.println( e ); }

      finally { 
try { 
fw.close();
if ( in != null )
 in.close();
} catch (IOException e) {}          }
 

tmp

Mitglied
hehe ja danke für euren code. leider bringt der mir nicht sehr viel,denn ich will wie gesagt ein und die selbe datei editieren und nicht von einer datei lesen,das gelesene verarbeiten und in eine neue datei schreiben.
das würde irgendwann meine festplatte killen (weil es um sehr große datenmengen geht) und ich die datei mehrmals anfassen muss.

ums mal zu beschreiben.
ich schaue in die datei und suche mir eine variable (die in der datei steht) daraufhin gehe ich durch die komplette datei und suche weitere vorkommen dieser variable. kommt sie noch ein mal vor,wird sich komplett entfernt.
daraufhin wird die selbe prozedur wieder durchgeführt,bis nichts mehr vereinfacht werden konnte.

wenn ich nun eine 2gb datei habe und diese jedes mal lesen,editieren,in eine neue datei speichern würde,würde das ewigkeiten dauern.
deshalb suche ich eine lösung,wie ich eine zeile nehmen,editieren und in die selbe datei wieder schreiben kann.
 

tmp

Mitglied
Quaxli hat gesagt.:
Ich habe es kaum kommentiert - mit Absicht. Du sollst dabei schließlich auch was lernen. ;)

ich bin übrigens kein java neuling. habe auch schon komplexere projekte in java umgesetzt.
aber bei dieser datenverarbeitung komme ich einfach nicht weiter.

ich will einfach nur eine bestimmt zeile nehmen,editeren und genau in diese zeile wieder schreiben,ohne jedes mal
die komplette datei kopieren oder über der kompletten datei iterieren zu müssen.
 
S

SlaterB

Gast
ein gutes 200mb-Verwaltungs-Datei-Ding nennt sich übrigens Datenbank ;)

was ist denn eigentlich mit RandomAccessFile,
kenne ich jetzt nicht so wirklich, aber hast du dessen/ deren Möglichkeiten schon angeschaut?
 

tmp

Mitglied
ja damit spiele ich schon die ganze zeit rum und kann auch gezielt zeilen lesen. aber diese ersetzen klappt eben nicht.
 

Quaxli

Top Contributor
Wenn Du ganze Zeilen auf die oben beschriebene Art löschen willst, ist RandomAccessFile der bessere Ansatz, weil Du hier den Filepointer zurück setzen kannst. Du müßtest dann den Pointer um die Länge der zu löschenden Zeile zurück setzen. Allerdings wird dann das Ende der Datei nicht automatisch mit Leerzeichen überschrieben, da müßtest Du Dir noch was einfallen lassen.

Ob das so richtig viel Spaß macht, weiß ich nicht. ???:L

hehe ja danke für euren code. leider bringt der mir nicht sehr viel,denn ich will wie gesagt ein und die selbe datei editieren und nicht von einer datei lesen,das gelesene verarbeiten und in eine neue datei schreiben.
das würde irgendwann meine festplatte killen (weil es um sehr große datenmengen geht) und ich die datei mehrmals anfassen muss.

Die Klasse File hat da eine Methode namens delete()..... :wink:

Von wie vielen Variabeln reden wir hier eigentlich? Wieviele Mehrfach-Einträge kommen denn in der Regel so vor?
Der von Dir beschriebene Ansatz klingt für mich sehr umständlich. Wäre es eine Option vorkommende Variablen in einer Collection zu speichern und bei wiederholtem Auftreten sich die Zeilennummer oder den Wert des Filepointers zu merken und dann beim einmaligen Schreiben die gemerkten Zeilen wegzulassen?
Ist nur so eine Idee, da ich ja den Aufbau der zu bearbeitenden Datei nicht kenne....

Der Vorschlag von SlaterB mit der Verwendung einer Datenbank hätte übrigens auch seine Vorteile.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
bernd Gezieltes auslesen mit BufferedReader Java Basics - Anfänger-Themen 30
A Hilfe beim Lesen von Pfaden und Systemvariablen Java Basics - Anfänger-Themen 3
I API - zurückgegebener JSON String lesen und in Entity konvertieren Java Basics - Anfänger-Themen 2
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
W Timestamp lesen Java Basics - Anfänger-Themen 6
J Dateien lesen und schreiben Java Basics - Anfänger-Themen 5
F MS365 Kalender lesen Java Basics - Anfänger-Themen 5
Robin Gentele XML von Webserver lesen und ausgeben Java Basics - Anfänger-Themen 5
H Scripte oder Programmcode aus Datei lesen? Java Basics - Anfänger-Themen 5
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
C Fehlermeldungen lesen Java Basics - Anfänger-Themen 2
S Allgemeine Java Codes lesen und verstehen Java Basics - Anfänger-Themen 7
NeoLexx Datenströme Lesen und Schreiben einer Textdatei Java Basics - Anfänger-Themen 2
rafi072001 Lesen aus einem Excel File Java Basics - Anfänger-Themen 10
T Klassen Den Wert aus Array lesen lassen Java Basics - Anfänger-Themen 12
J Lesen und schreiben in eine Datei(Anfänger- Dateizugriffe) Java Basics - Anfänger-Themen 3
S JSON Datei schreiben und lesen Java Basics - Anfänger-Themen 3
S Java Array Länge aus anderer Klasse lesen Java Basics - Anfänger-Themen 1
G Excle datei aus resources folder finden und lesen Java Basics - Anfänger-Themen 5
J Datei aus Projektfolder lesen Java Basics - Anfänger-Themen 12
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
S Tastatur input lesen Java Basics - Anfänger-Themen 7
S Mit FileReader lesen, in ArrayList speichern Java Basics - Anfänger-Themen 4
B Aus Datei lesen Java Basics - Anfänger-Themen 23
B Aus Datei lesen Java Basics - Anfänger-Themen 0
deatzi Wert aus anderer Klasse lesen Java Basics - Anfänger-Themen 7
W Wie lasse ich meine Ausgabe nach dem Lesen verschwinden ? Java Basics - Anfänger-Themen 1
A JSON Lesen und Schreiben. Java Basics - Anfänger-Themen 3
S Daten lesen und speichern Java Basics - Anfänger-Themen 26
C Input/Output Datei aus Startverzeichnis lesen Java Basics - Anfänger-Themen 6
amazinglife77 Input/Output Lesen/Schreiben Properties: in eclipse geht, als JAR nicht Java Basics - Anfänger-Themen 4
G Input/Output Aus txt-Datei lesen, aus Ordner Java Basics - Anfänger-Themen 1
S BufferedReader nächste Zeile lesen Java Basics - Anfänger-Themen 4
sourcecorn Werte aus einem File lesen Java Basics - Anfänger-Themen 6
G Jar-Archiv zum Lesen einer Konfigurationsdatei Java Basics - Anfänger-Themen 9
MaxG. Input/Output Datei lesen Java Basics - Anfänger-Themen 3
Hacer Quellcode lesen Java Basics - Anfänger-Themen 13
H Aus wav-datei lesen und in neue wav-datei speichern Java Basics - Anfänger-Themen 10
N Lesen eines files mit FILES.lines Java Basics - Anfänger-Themen 11
A Private Attribut aus fremder Klasse lesen ? Java Basics - Anfänger-Themen 19
R Ab einer bestimmten Zeile lesen Java Basics - Anfänger-Themen 3
P vokale konsonanten ziffern satzzeichen aus string lesen. hab kiene ahnung Java Basics - Anfänger-Themen 10
A textfeldwerte aus array lesen Java Basics - Anfänger-Themen 27
K Classpath Lesen von Property-File Java Basics - Anfänger-Themen 1
D Methoden Array aus Datei lesen und weitergeben? Java Basics - Anfänger-Themen 7
T 'Nix' aus Textdokument lesen Java Basics - Anfänger-Themen 11
G tga Datei lesen und in eine matrix umwandeln Java Basics - Anfänger-Themen 1
F Input/Output Dateien lesen/schreiben Java Basics - Anfänger-Themen 1
E lesen csv file column by column Java Basics - Anfänger-Themen 10
G Bis zu einem bestimmten Punkt aus Datei lesen Java Basics - Anfänger-Themen 2
K Mit Scanner aus einer txt Datei lesen und jede Person mit name, vorname, geburtsdatum speichern Java Basics - Anfänger-Themen 5
K Dateien lesen | IndexOutOfBoundsException Java Basics - Anfänger-Themen 2
E Input/Output Property-Datei aus einer Zip lesen in in einer anderen Zip-Datei ist Java Basics - Anfänger-Themen 3
B Input/Output Scanner-Probleme bei String-Lesen Java Basics - Anfänger-Themen 3
I Properties oder Umgebungsvariablen mit ${irgendwas} lesen? Java Basics - Anfänger-Themen 2
D Lesen aus Datei (java.util.NoSuchElementException) Java Basics - Anfänger-Themen 22
D Problem beim Lesen einer txt-Datei Java Basics - Anfänger-Themen 8
G Zeile charweise lesen Java Basics - Anfänger-Themen 3
J Aus Datei lesen und ausgeben Java Basics - Anfänger-Themen 4
N Bestimmte Inhalte aus Datei lesen Java Basics - Anfänger-Themen 11
G Datei zeilenweise lesen Java Basics - Anfänger-Themen 19
M Wie sämtliche Schlüssel und Attibutwerte aus einer Propertie Datei lesen? Java Basics - Anfänger-Themen 3
S Compiler-Fehler jOpenDocument Kompelierfehler - ODS Datei lesen Java Basics - Anfänger-Themen 2
C Aus einer Textdatei Zahlen lesen mit Leerzeichen Java Basics - Anfänger-Themen 11
T BufferReader soll datei mehrmals lesen Java Basics - Anfänger-Themen 13
G Leere Zeile lesen Java Basics - Anfänger-Themen 12
F Effizientes Lesen von 65 Datein mit Boolean Werten Java Basics - Anfänger-Themen 6
S Datei aus JAR lesen. Java Basics - Anfänger-Themen 9
G Zeilenweise lesen Java Basics - Anfänger-Themen 17
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
B Erst lesen: Automatisch Texteingabe bestätigen Java Basics - Anfänger-Themen 6
S Textdatei lesen, Methode gibt nur die letzte Zeile aus. Warum? Java Basics - Anfänger-Themen 5
X Einen Text aus dem Netz lesen?! Java Basics - Anfänger-Themen 3
J Java API lesen lernen Java Basics - Anfänger-Themen 4
Z Problem beim Lesen und Schreiben einer Datei Java Basics - Anfänger-Themen 10
N Erste Zeile bei BufferedReader doppelt lesen? Java Basics - Anfänger-Themen 2
R Input/Output einzelnes char aus .txt lesen Java Basics - Anfänger-Themen 11
R XML mit unsortierten Nodes lesen Java Basics - Anfänger-Themen 4
M Zahlen aus Array lesen Java Basics - Anfänger-Themen 19
I Methoden zum lesen und speichern von Dateien Java Basics - Anfänger-Themen 2
M Dateien erstellen/ bearbeiten/ lesen Java Basics - Anfänger-Themen 9
M Input/Output Viele short aus Datei lesen und von Little Endian zu Big Endian umwandeln Java Basics - Anfänger-Themen 12
J Lesen von Textdokumenten Java Basics - Anfänger-Themen 3
J Zeichen aus String Array lesen Java Basics - Anfänger-Themen 13
J Können mehere Threads parallel eine Datei lesen? Java Basics - Anfänger-Themen 4
A Eine Datei Lesen und bestimmte Position überschreiben Java Basics - Anfänger-Themen 2
J Erste Schritte ExceptionError beim Lesen eines .ZIP Java Basics - Anfänger-Themen 19
B Javadoc richtig lesen... Java Basics - Anfänger-Themen 4
S Zeichen von Telnet lesen Java Basics - Anfänger-Themen 5
H Lesen einer Texdatei im Web Java Basics - Anfänger-Themen 10
J Input/Output Textdatei in einer JAR lesen Java Basics - Anfänger-Themen 3
G Konto-Historie speichern/lesen Java Basics - Anfänger-Themen 4
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
J Per I/O Streams in LinkedList oder ArrayList schreiben/lesen Java Basics - Anfänger-Themen 6
F Dateien lesen klappt nicht Java Basics - Anfänger-Themen 2
S Textdatei im Internet lesen und editieren Java Basics - Anfänger-Themen 2
S Input/Output aus Datei lesen Java Basics - Anfänger-Themen 6
N Variablen aus Action Listener lesen und weiterverarbeiten Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben