Auslesen und schreiben in eine Textdatei.HILFE!HILFE!

Status
Nicht offen für weitere Antworten.

tanechka

Bekanntes Mitglied
Hallo,

ich habe schon vieles ausprobiert, aber ich komme selbe mit meinem Problem nicht klar. Ich soll eine Textdatei auslesen mit dem Namen "codes.txt" und ab neue Zeile neue Codes dazuschreiben.
Zum Beispiel ich habe in dieser Datei schon so ein Text geschieben:

ATTT
TTGG

Wenn ich was neues dazu schreiben will, soll dass ab neue Zeile anfangen:

ATTT
TTGG
TTGG

Ich habe bisher eine Methode geschrieben, die scheint aber nicht richtig zu funktionieren. Ich brauche eure Hilfe!!!! :bahnhof:

Hier ist was ich ausprobiert habe:
Code:
	public static void writeVectors( String vector)
			throws IOException {
//		PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(
//				"vectors.txt")));
		///
		 try 
	      {
	         File fileIn  = new File("vectors.txt");
	         File fileOut = new File("vectors.txt");

	         FileInputStream streamIn   = new FileInputStream(fileIn);
	         FileOutputStream streamOut = new FileOutputStream(fileOut);
	         
	         FileReader reader = new FileReader("vectors.txt");
	         Scanner in = new Scanner(reader);
	         
	         PrintWriter out = new PrintWriter("vectors.txt");
	         BufferedReader inn = new BufferedReader(new FileReader("vectors.txt"));
	         String s = inn.readLine();
	         //System.out.println(in.next());
//	         if (!in.hasNextLine()){
//	        	 
//	        	 out.print(vector);
//	        	 out.println();	        
//	         }       	
	         s = inn.readLine();
	         do {
	        	out.append(vector.charAt(0));
	     		//out.print("test");
	     		out.close();
	 			
	 		} while ((s = inn.readLine()) == null);

	         int c;
	         while ((c = streamIn.read()) != -1) 
	         {	 
	             
	             out.println();
	        	 out.print(vector);
	        	 out.println();
	         }

//	         streamIn.close();
//	         streamOut.close();
	      }
	      catch (FileNotFoundException e) 
	      {
	         System.err.println("FileCopy: " + e);
	      } 
	      catch (IOException e) 
	      {
	         System.err.println("FileCopy: " + e);
	      }
	   
	////
		    //out.print(vector);
			//out.println();
		   // out.close();
	}
 

tanechka

Bekanntes Mitglied
ja :( , ich habe vieles ausprobiert. Alles scheinte nicht richtig zu funktionieren. Danke für den Link. Kannst du mir vielleicht Klassen anbieten, die mein Problem lösen könnten?
 
G

Guest

Gast
Kleines Beispiel, wie man einen String in eine Datei schreiben kann:
Code:
try
{
    FileWriter fw = new FileWriter("dateiname.txt");
    fw.write("1. Zeile: Test Ausgabe \r\n2. Zeile: in eine Datei");
    fw.close();
}catch(IOException ex)
{
    ex.printStackTrace();
}
 

tanechka

Bekanntes Mitglied
ich habe im Prinzip kein Problem, wenn es allein ums Schreiben oder Lesen aus einer Datei geht. Ich habe das Problem, wenn es an einer Datei passiert. Erst auslesen und dann ab der neuen Zeile etwas schreiben.
 

tanechka

Bekanntes Mitglied
wenn das Schreiben passiert, wird der Inhalt der Datei gelöscht. Es soll aber nichts gelöscht werden.
 
G

Guest

Gast
Wieso machst du dann kein append?

Code:
FileWriter fw = new FileWriter("dateiname.txt");
fw.append("\n mein neuer String");
 

tanechka

Bekanntes Mitglied
ich mache append(), aber ich mache vielleicht etwas falsch:

Code:
 do {
              out.append(vector.charAt(0));
              //out.print("test");
              out.close();
             
          } while ((s = inn.readLine()) == null);

es wird was neues geschrieben und altes gelöscht.
 
G

Guest

Gast
Leider hab ich im Moment nicht die Möglichkeit dir weiter zu helfen. Allerdings heute abend werd ich mal ein Beispiel basteln und hier posten, wenn du das willst.
 
G

Guest

Gast
So so funktionierts bei mir:

Code:
package demo;

import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

public class MyFileWriter {

	//Die einzelnen Schritte:
	//1. Datei erzeugen
	public boolean createNewFile(String filename)
	{
		boolean create=true;
		File file = new File(filename);
		if (file.exists())
		{
			System.out.println("Die Datei existiert bereits!");
		}
		else{
			try {
				file.createNewFile();
				System.out.println("Die Datei " + file.getPath()+ " wurde neu erstellt.");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				create=false;
			}
		}
		return create;
	}
	
	//2. Teststring A in die Datei schreiben
	public boolean writeStringInFile(String filename, String strToWrite)
	{
		boolean write=true;
		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(filename)); 
			bw.write(strToWrite+"\r\n");
			bw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			write=false;
		}
		return write;
	}
	//3. Teststring B an die Datei dranhängen
   //Wenn append = false ist, geht der komplette vorherige Inhalt verloren
	public boolean appendString(String filename, String strAppend, boolean append)
	{
		boolean canAppend=true;
			try {
				FileOutputStream file = new FileOutputStream(filename,append);
				DataOutputStream out   = new DataOutputStream(file);
				out.writeBytes(strAppend+"\r\n");
				out.flush();
				out.close();
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				canAppend=false;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				canAppend=false;
			}
		
		return canAppend;
	}
}

Der Aufruf:
Code:
package demo;

public class FileTester {

	public static void main(String[] args)
	{
		MyFileWriter writer = new MyFileWriter();
		String fileName = new String("C:\\testfile.txt");
		writer.createNewFile(fileName);
		writer.writeStringInFile(fileName, "Meine erste Zeile");
		writer.appendString(fileName, "Meine zweite Zeile", true);
	}
}

Viel Spaß damit ;).
LG
 

tanechka

Bekanntes Mitglied
Danke dir. Es funktioniert wunderbar. Ich habe nur diesen Teil geändert:

Code:
out.writeBytes(strAppend +[b] "\n"[/b]);
 

tanechka

Bekanntes Mitglied
Ich habe noch eine Frage. Ich habe eine Methode geschrieben zum Auslesen von einem Vektor, der sich an einer bestimmten Position in meiner Textdatei befindet:
Code:
public static String readVector(String fileName,int position) throws IOException {		
		BufferedReader in = new BufferedReader(new FileReader(fileName));		
		int numRows = 0;
		String s = in.readLine();
		List<String> dnaCodes = new ArrayList();		
		do {			
			dnaCodes.add(s);
			numRows++;
		} while ((s = in.readLine()) != null);       
		in.close();		
		return dnaCodes.get(position).toString();
	}

In meiner Methode gehe ich alle Zeilen durch und schreibe die in ein Array und danach nehme nur den, der an einer gegebenen Position befindet.
Da ich sehr viele Zeilen in der Datei habe, scheint mir die Lösung nicht effizient zu sein.Gibt es vieleicht andere Möglichkeiten, das Problem zu lösen. Meine Methode funktioniert richtig,nur nicht effizient:(((
 

0x7F800000

Top Contributor
wozu speicherst du das alles in der liste? wenn du die information nicht brauchst, dann überliest du diese mit "readLine" einfach, und speicherst die überhaupt nirgendwo. Ansonsten, wenn du irgendwie einfach berechnen kannst, wo du zu lesen anfangen musst, dann kannst du auch RandomAccessFile.skip() direkt zu den benötigten daten gelangen, ohne jede zeile davor zu zählen...
 

tanechka

Bekanntes Mitglied
Ich habe alles in ein Array geschrieben, damit ich auf die Position kommen kann. Ich habe versucht mit der skip() Methode:

Code:
public static String readVector(String fileName, int position)
			throws IOException {
		BufferedReader in = new BufferedReader(new FileReader(fileName));
		String s ;		
		RandomAccessFile raf = new RandomAccessFile("vectors.txt", "r");

		if (((s = in.readLine()) != null)) {
			raf.skipBytes(???);
			s = raf.readLine();			
		}
		in.close();
		return s;
	}

Wie kann ich die Anzahl von Bytes kommen, durch die ich skippen soll?
 

0x7F800000

Top Contributor
Ne, sorry, sich mit bytes herumzuprügeln ist blödsinn, mein fehler.
BufferedReader unterstützt doch auch die skip() methode, aber nicht für bytes sondern für ganze zeichen.
Dann musst du lediglich
Code:
BufferedReader.skip(zeilennummer*zeilenlänge)
aufrufen, und schon bist du an der richtigen stelle.

edit: wobei ich ehrlichgesagt keine ahnung habe, wie der BufferedReader das intern eigentlich anstellt. Vielleicht muss er intern jedes zeichen durchgehen und zählen, was stets sehr langsam wäre, weil die zeichen ja keine feste byte-länge haben müssen (bei irgendwelchen unicode-codierungen oder sowas, wo ein buchstabe mal 1 mal 4 bytes wegnimmt)

Mit dem RandomAccessFile wäre das aber auch nicht sonderlich angenehm, weil etwa zeilenumbrüche irgenwie betriebsystemanhängig sein können oder sowas... Dann sind manchmal ein, manchmal zwei zeichen nötig :bahnhof: glaub ich.

aber da würde es auch etwa mit
Code:
RandomAccessFile.skip(zeilennummer*(anzahlDerBuchstabenProZeile*1+2))
gehen, evtl wesentlich schneller als beim BufferedReader, weil direkt die bytes angegeben werden.

Aber wie gesagt: ich weiß es nicht.

Meiner meinung nach wird diese Textdatei eh kein mensch lesen wollen (geht doch um irgendwelche DNA/RNA sequenzen oder nicht? Die werden doch dutzend kilometer lang, oder?) Wozu soll man sich dann überhaupt stress mit den ganzen Zeichen und Buchstaben und Textdateien machen, statt die information direkt abzuspeichern?
 

tanechka

Bekanntes Mitglied
Es geht um DNA-Sequencen. Da die sehr lang sind, wollte ich die erstmal in einer Textdatei speichern und einen nach dem anderen abarbeiten.
Diese Code hat funktioniert:

Code:
public static String readVector(String fileName, int position)
			throws IOException {
		BufferedReader in = new BufferedReader(new FileReader(fileName));
		String s = in.readLine();
		RandomAccessFile raf = new RandomAccessFile("vectors.txt", "r");
		in.skip(s.length() * (position - 1));
		if (((s = in.readLine()) != null)) {
			s = in.readLine();
		}
		in.close();
		return s;
	}
 

tanechka

Bekanntes Mitglied
Es geht um DNA-Sequencen. Da die sehr lang sind, wollte ich die erstmal in einer Textdatei speichern und einen nach dem anderen abarbeiten.
Diese Code hat funktioniert:

Code:
public static String readVector(String fileName, int position)
			throws IOException {
		BufferedReader in = new BufferedReader(new FileReader(fileName));
		String s = in.readLine();
		RandomAccessFile raf = new RandomAccessFile("vectors.txt", "r");
		in.skip(s.length() * (position - 1));
		if (((s = in.readLine()) != null)) {
			s = in.readLine();
		}
		in.close();
		return s;
	}

Danke dir für Hilfe. Ich würde allein auf diese Methode nicht kommen.
 

0x7F800000

Top Contributor
warum rechnest du "position-1" aus? was soll der mir ausgeben, wenn ich die 0-te zeile will? Oder willst du etwa, dass deine methode entgegen aller konventionen bei "1" anfängt zu zählen? :!: lass das sein, das bringt nur ärger und viele exceptions und +1 -1 umindizierungen an jeder ecke...
 

0x7F800000

Top Contributor
bzw. warum liest du in dieser if-abfrage die zeile zweimal aus, wofür soll das gut sein?
Und wofür ist dieser "raf" überhaupt noch da, den brauchst du doch gar nicht. Muss Eclipse (oder welche IDE du auch immer benutzst) doch unterstreichen, oder eine warnung anzeigen oder sowas....
 

tanechka

Bekanntes Mitglied
Ich brauche den ersten nicht.
(position-1), weil ich schon einmal in.readLine() aufgerufen habe. Wenn ich ohne if-Anweisung schreibe, kriege ich als Wert für s 10, obwohl es 0000000000000010 sein muss.Hmm... Mit if-Anweisung läuft alles ohne Probleme. Wenn ich den ersten Wert doch auslesen will,liefert die Methode Nullpointer.


Code:
public static String readVector(String fileName, int position)
			throws IOException {
		BufferedReader in = new BufferedReader(new FileReader(fileName));
		String s = in.readLine();		
		in.skip(s.length() * (position-1));
		if (((s = in.readLine()) != null)) {
			s = in.readLine();
		}
		in.close();
		return s;
	}
 

0x7F800000

Top Contributor
aja, weil du in der methode einmal pos-1 ausrechnest, dann aber zwei zeilen ausliest. Ziemlich sinnfrei. Kannst auch direkt pos so sein lassen wie es ist, und nur einmal das auslesen, was du brauchst. Zweimal falsch kann zwar evtl was richtiges liefern, aber sein muss es nicht oder?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Array in eine Datei Schreiben und wieder auslesen Allgemeine Java-Themen 10
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
J Zeilenweise in Datei schreiben/auslesen Allgemeine Java-Themen 3
M Textdatei auslesen / schreiben (Server) Allgemeine Java-Themen 9
M INI-Files in Java auslesen/schreiben Allgemeine Java-Themen 2
L Input/Output Email mit großer Pdf Anhang auslesen? Allgemeine Java-Themen 5
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
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

Ähnliche Java Themen

Neue Themen


Oben