textdateien manipulieren, welche klasse? wie?

Status
Nicht offen für weitere Antworten.

dermoritz

Bekanntes Mitglied
was ich machen will steht eigentlich dort:
http://www.java-forum.org/de/topic69033_nicht-ganz-valiedes-xml-einlesen.html

nun les ich schon seid geraumer zeit im java inselbuch (bin ein java anfänger), aber das verwiirt mich alles sehr bzw. hab ich nich die zeitn alles zu lesen. das lernen anhand von beispielen oder "learning by doing" erscheint mir sinnvoller.

also ich würde gerne wissen wie man "am besten" eine textdatei öffnet nach einer stelle sucht und diese durch einen string ersetzt oder einen string einfügt.
welche klasse(n) brauche ich da (es gibt ja alleine für dateikram unzählige)? gibt es irgendwelche "best practices"?

vielen dank mal im voraus
 
G

Gast

Gast
Code:
	BufferedReader reader = null;
		try {
			reader = new BufferedReader(new FileReader("C:\\test.txt"));
			List<String> lines = new ArrayList<String>();
			String line = "";
			while ((line = reader.readLine()) != null) {
				if (line.contains("was such ich")) {
					// ersetzten, anfügen was auch immer;
					lines.add("neuer kram");

				} else {
					lines.add(line);
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
 

dermoritz

Bekanntes Mitglied
vielen vielen dank!

da ich auch noch etwas lernen will würde mich der ansatz interessieren. bei vielen beispielen findet man

Code:
while ((line = reader.readLine()) != null)

nun hab ich mich immer gefragt ob man nicht die datei auch komplett als riesen(string) einlesen kann onkl aller "\n" usw. in meinem fall ist das tatsächlich nicht unbedingt nötig - würde mich aber interssieren.

bei meiner recherche bin ich auch auf sowas gestoßen:

Code:
try
{ Scanner javaProgramm = new Scanner(new File(dateiname));
dateiGeoeffnet = true;

} catch (FileNotFoundException e)
{ System.out.println("Datei "+dateiname+" nicht gefunden."); }

und dann:

Code:
for (int i=1; javaProgramm.hasNext(); i++)
{ String zeile = javaProgramm.nextLine();
int pos = zeile.indexOf(suchString);
if (pos < 0) // suchString kommt nicht vor
System.out.println(i+": "+zeile);
else // suchString kommt vor
{ System.out.print(i+":"+
zeile.substring(0,pos)+
"***"+suchString+"***");
zeile = zeile.substring(
pos+suchString.length(), zeile.length());
System.out.println(zeile);
}
}

das beispiel sollte auch gut auf meinen fall anpassbar sein?

aber die eigentlich frage ist was ist "besser" (bitte nicht "geschmackssache")? gibt es vor und nachteile? dein ansatz "gast" erscheint mir direkter. gibt es auch ein line.replace?

falls ich die zeile weiß die ich ändern will, gibt es ein readline(int linenumber)?



edit: was mir grade noch einfällt, wie schreib ich in die datei zurück? dafür brauch ich ja die komplette datei als string und muss sie speichern, oder nicht? kann ich auch die entsprechende zeile suchen sie ersetzen (wie in deinem code gast) und dann die zeile in der datei durch diese ersetzen (replacelininfile(int linenumber, string replacement) - gibts sowas?)

edit2: der vorherige edit war vielleicht etwas mißverständlich formuliert. also mich stört prinzipiell die whileschleife insbesondere wenn sie über alle zeilen wandert. denn eigentlich will ich nur eine zeile (die zeilen nummer ist mir sogar bekannt) ind einer text datei ersetzen. ich bräuchte sozusagen eine art randomaccessfile was nicht auf bytes operiert sonder auf zeilen/string/char basis - oder seh ich das falsch?
ich werd doch nicht der erste sein dem eine while schleife für das ersetzen einer festen zeile nicht behagt?
 

dermoritz

Bekanntes Mitglied
gibt es eine möglichkeit die vorgestellte lösung so anzupassen das die zeilen nicht in eine stringlsite kommen sondern, dass die komplette datei in einem string landet?
 

The_S

Top Contributor
ja ...

Code:
FileInputStream fis = new FileInputStream(datei);
byte[] bytes = new byte[(int)datei.length()];
fis.read(bytes);
String data = new String(bytes);
fis.close();
 

blackMamba

Mitglied
von Hobbit_im_Blutrausch ist das natürlich auch ne coole Variante. Ich hätte eine ganze Klasse anzubieten, die aber fast das gleiche macht.
Code:
import java.io.*;

public class ReadFile {

  public static String readFile(String name) {
      char[] buffer;
      try {
         File file = new File(name);
         FileReader fr=new FileReader(file);
         int size = (int) file.length();
         buffer = new char[size];
         fr.read(buffer, 0, size);
         fr.close();
      }
      catch (IOException e) {
         return null;
      }
      return new String(buffer);
  }

  public static void main(String[] args) {
      String fileName = args[0];
      String fileContent = readFile(fileName);
      System.out.print(fileContent);
  }
}
 

lhein

Top Contributor
Wenn ich nicht komplett unter Koffeinentzug leide, dann hat Dein Code einen ganz entscheidenden Nachteil...
Sobald beim Lesen ein Fehler auftritt, bricht die readFile Methode ab, das File ist aber ggf. noch offen und damit von aussen nicht mehr änder- bzw. löschbar.

Sowas gehört in ein try-catch-finally verpackt.

lhe



blackMamba hat gesagt.:
von Hobbit_im_Blutrausch ist das natürlich auch ne coole Variante. Ich hätte eine ganze Klasse anzubieten, die aber fast das gleiche macht.
Code:
import java.io.*;

public class ReadFile {

  public static String readFile(String name) {
      char[] buffer;
      try {
         File file = new File(name);
         FileReader fr=new FileReader(file);
         int size = (int) file.length();
         buffer = new char[size];
         fr.read(buffer, 0, size);
         fr.close();
      }
      catch (IOException e) {
         return null;
      }
      return new String(buffer);
  }

  public static void main(String[] args) {
      String fileName = args[0];
      String fileContent = readFile(fileName);
      System.out.print(fileContent);
  }
}
 

dermoritz

Bekanntes Mitglied
hab glaub eine ganz brauchbare lösung:

Code:
	private void preprocess_File(String File) {
		try {
			byte[] b=null;
			RandomAccessFile file= new RandomAccessFile(File,"rw");
			b=new byte[(int) file.length()];
			file.read(b);
			String content=new String(b,"UTF8");
			content=content.replace("was suche ich", "geändert" );
			System.out.println(content);
			file.seek(0);
			file.writeUTF(content);
			file.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


das einzige bei dem ich mir nicht 100% sicher bin, is die sache mit der kodierung. ziel war die ganze zeit in utf8 zu bleiben - hab ich das erreicht?

ich nehme auch gerne verbesserungsvorschläge auf die insbesondere den code "schöner" machen - bin halt ein java noob, der gerne eclipse für sich arbeiten lässt ;-).

edit: writeUTF schreibt in die ersten 2 bytes die anzahl der bytes die es schreibt - so ist die funktion unbrauchbar. mit writeBytes(string) funktioniert es. die frage ist bleibt damit die kodierung erhalten? es verwirft ja die höheren 8 bits laut doku.
 

dermoritz

Bekanntes Mitglied
die lösung kommt von:
http://kickjava.com/src/org/apache/lenya/util/SED.java.htm

das problem war beim schreiben wird z.b. eine utf-8 kodierung zerstört deswegen hab ich es mit:

http://www.exampledepot.com/egs/java.io/WriteToUTF8.html

kombiniert:

Code:
public void replaceAll(File file, String substitute,	String substituteReplacement) throws IOException {
		//log.debug("Replace " + substitute + " by " + substituteReplacement);
		Pattern pattern = Pattern.compile(substitute);
		// Open the file and then get a channel from the stream
		FileInputStream fis = new FileInputStream(file);
		FileChannel fc = fis.getChannel();
		// Get the file's size and then map it into memory
		int sz = (int) fc.size();
		MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz);

		// Decode the file into a char buffer
		// Charset and decoder for ISO-8859-15
		Charset charset = Charset.forName("UTF-8");
		CharsetDecoder decoder = charset.newDecoder();
		CharBuffer cb = decoder.decode(bb);

		Matcher matcher = pattern.matcher(cb);
		String outString = matcher.replaceAll(substituteReplacement);
		System.out.println(outString);

		Writer fos = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file.getAbsolutePath().replace(".cte", ".xml")), "UTF8"));
		
		fos.write(outString);
		fos.close();
	}

ich kann nicht behaupten das ich alles verstehe, es funktioniert aber.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
F Input/Output 2 Textdateien mit einander vergleichen Java Basics - Anfänger-Themen 11
_0815_ Problem mit dem Automatischen eintragen in Textdateien Java Basics - Anfänger-Themen 1
S 4 große Textdateien zu einer Mergen Java Basics - Anfänger-Themen 5
K Textdateien vergleichen optimieren Java Basics - Anfänger-Themen 9
Z Textdateien einlesen und verarbeiten Java Basics - Anfänger-Themen 3
Bluedaishi Textdateien splitten, neu schreiben Java Basics - Anfänger-Themen 13
H Textdateien in Ordner einlesen - unendlich ? Java Basics - Anfänger-Themen 8
T mehrere Benutzer greifen auf Textdateien zu Java Basics - Anfänger-Themen 3
H Vergleichen mit mehreren Textdateien Java Basics - Anfänger-Themen 2
MilchToast Teilstrings aus unbekannt großen Textdateien extrahieren. Java Basics - Anfänger-Themen 5
B Textdateien erweitern Java Basics - Anfänger-Themen 7
A Zugriff auf Textdateien und Datenbanken Java Basics - Anfänger-Themen 3
T Textdateien mit Unicode-Zeichen kopieren Java Basics - Anfänger-Themen 2
F mehrer Textdateien Inhalte in eine TXT Datei Java Basics - Anfänger-Themen 16
H in Textdateien etwas schreiben bzw. speichern Java Basics - Anfänger-Themen 2
cowabunga1984 Auslesen von Informationen aus Textdateien Java Basics - Anfänger-Themen 2
J in Textdateien speichern - aus Textdateien auslesen Java Basics - Anfänger-Themen 5
G Textdateien bearbeiten Java Basics - Anfänger-Themen 22
G Bilder und Textdateien aus jar einbinden Java Basics - Anfänger-Themen 7
F Zugriff auf Textdateien über URL Java Basics - Anfänger-Themen 2
E Zwei Textdateien in eine kopieren Java Basics - Anfänger-Themen 5
S Input/Output System.out.println - Manipulieren bzw. Alternative..? Java Basics - Anfänger-Themen 2
J Vector Manipulieren.. Wie? Java Basics - Anfänger-Themen 16
J String manipulieren Java Basics - Anfänger-Themen 3
G ARP Cache manipulieren Java Basics - Anfänger-Themen 7
M Systemzeit manipulieren Java Basics - Anfänger-Themen 11
X Objekte beim Erstellen manipulieren Java Basics - Anfänger-Themen 6
N String manipulieren Java Basics - Anfänger-Themen 15
R JVM zur laufzeit manipulieren? Java Basics - Anfänger-Themen 4
G FileInputStream manipulieren Java Basics - Anfänger-Themen 6
D text dateien mit RandomAccessFile manipulieren Java Basics - Anfänger-Themen 6
J Werte in einer Klasse aus anderer Klasse manipulieren Java Basics - Anfänger-Themen 17
T Vektorgrafiken manipulieren? Java Basics - Anfänger-Themen 10
Z Applet: Eingabe aus Textfeld auslesen und manipulieren Java Basics - Anfänger-Themen 3
T Zahlen Umkehren / Manipulieren / Sortieren Java Basics - Anfänger-Themen 18
M Wie auf ein Objekt zugreifen und dieses manipulieren? Java Basics - Anfänger-Themen 5
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
Q SMS basierte Applikationen, welche Programmiersprache? Java Basics - Anfänger-Themen 8
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
H Welche Werte bei Objekterzeugung eingeben? Java Basics - Anfänger-Themen 2
Arita welche Fehler gibt es noch? wie kann ich es noch vervollständigen Java Basics - Anfänger-Themen 15
tony241188 Implementieren Sie die Klasse Hersteller, welche die folgenden Elektrogeräte produziert Java Basics - Anfänger-Themen 3
FelixN Teilsummenproblem / welche Datenstruktur Java Basics - Anfänger-Themen 2
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
W Welche Komponente ist geeignet? Java Basics - Anfänger-Themen 1
A Welche Operation ist das? Java Basics - Anfänger-Themen 2
J Welche Java-Version installieren Java Basics - Anfänger-Themen 9
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
K GUI Entwicklung - Welche Richtung passt für euch zum mobilen Zeitalter? Java Basics - Anfänger-Themen 4
T Datenbank | Welche am Sinnvollsten? Java Basics - Anfänger-Themen 5
S Welche Verteilung? Java Basics - Anfänger-Themen 1
L Welche Methode? Java Basics - Anfänger-Themen 7
O Methoden welche ich implementier Java Basics - Anfänger-Themen 11
A Wie erkennt die JVM welche class verwendet werden muss? Java Basics - Anfänger-Themen 3
M JDK installieren Welche Software bei XP? Java Basics - Anfänger-Themen 5
H Welche IDE zum Buch "Programmieren mit Java" von Reinhard Schiedermeier des Verlags Pearson Studium Java Basics - Anfänger-Themen 19
U Best Practice Fehleranalyse, welche Fehler macht Ihr beim Lernen bzw. auch später Java Basics - Anfänger-Themen 12
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
M Welche Entwicklungsumgebung? Java Basics - Anfänger-Themen 32
I Welche Schleife/Bedingung nehme ich her Java Basics - Anfänger-Themen 5
C Methoden Welche JSoup Methoden Und Parameter für diese HTML Tags Java Basics - Anfänger-Themen 4
K Erste Schritte Java lernen - Welche Bücher? Java Basics - Anfänger-Themen 1
P welche Komponente ist im Layout? Java Basics - Anfänger-Themen 2
TheMenox Methoden Bestimmung an welche Methode eine andere Methode ihren Wert weitergeben soll Java Basics - Anfänger-Themen 35
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
G Lambda Ausdruck: Welche Methode ist die Richtige? Java Basics - Anfänger-Themen 1
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
G Welche Java-Version auf meinem Rechner? Java Basics - Anfänger-Themen 2
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
A Klassen welche Klassen importiert Eclipse automatisch Java Basics - Anfänger-Themen 2
V welche Methode am besten sich für JPG einfügung in Java anzugewöhnen ? Java Basics - Anfänger-Themen 4
M Welche externen Bibliotheken sind in Java sehr zu empfehlen? Java Basics - Anfänger-Themen 4
I Grafische Benutzeroberflächen - welche Komponente nehme ich am besten? Java Basics - Anfänger-Themen 13
G Welche JAVA IDE? Java Basics - Anfänger-Themen 3
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
K Welche Java Version ist die richtige Java Basics - Anfänger-Themen 3
V Welche Exceptions müssen importiert werden? Java Basics - Anfänger-Themen 3
A Design Pattern - Welche? Java Basics - Anfänger-Themen 33
C Datenbank - Welche Java Basics - Anfänger-Themen 5
S Welche Art von Liste? Java Basics - Anfänger-Themen 3
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
A Wenn genau welche Liste verwenden? Java Basics - Anfänger-Themen 6
T Welche Schleife? Java Basics - Anfänger-Themen 6
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
S Collections Welche Collection ist am geeignetsten? Java Basics - Anfänger-Themen 3
S Input/Output Welche Möglichkeiten Eingabe von User abfragen Java Basics - Anfänger-Themen 5
P Swing - Welche Klasse für ausgeben von Ergebnissen? Java Basics - Anfänger-Themen 3
R Welche Datenstruktor für diese Liste? Java Basics - Anfänger-Themen 6
B Erste Schritte Welche Kenntnisse brauche ich für diese Programmidee? Java Basics - Anfänger-Themen 4
P Vererbung herausfinden welche Klasse was erbt Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben