String an Datei anhängen => überschreibt aber immer

Status
Nicht offen für weitere Antworten.

norman

Top Contributor
Hallo zusammen,

mein Ziel ist, dass eine Datei (Struktogramm.java) in so viele txt-Dateien gesplittet wird, wie sie Methoden beinhaltet. also in 3. In die txt-Files method[1..3] sollen dann die Code-zeilen der methoden geschrieben werden.
hier ist allerdings das problem => er überschreibt jedesmal alles was bereits in der txt-datei steht.

habe dabei write und append ausprobiert (s. ca Zeile 75)

ich vermute, das problem ist, dass ich (Z. 71) immer ein neues File-Objekt erzeuge. allerdings sollte er bei der write-methode doch an die richtige (letzte) stelle springen bevor er zu schreiben beginnt.

habe den wert von "(int) methodFile.length()" (Z. 76) mehrmals überprüft. er ensprach immer der anzahl der zeichen die in der datei stehen..


Grüße
Norman

Code:
package struktoGen;

import java.io.*;

/**
 * Splits the given *.java in *.txt files which each contain exactly 1 method
 * @author Norman
 */
public class FileSplitter {
	
	int open; 						/* number of opened brackets (to get method's end)*/ 
	File[] methods = new File[10];  /* TODO: size should be dynamic!! */
									/* first method will be methods[1] */
	int methodCount = 0; 			/* number of methods */
	File dir = new File("struktoGen\\");	/* directory of *.java and *.txt Files */
	File test=null;
	
	/**
	 * @param file file-object which will be splittet in *.txt files for each method
	 */
	FileSplitter(File file) {
		File f = file;
		System.out.println("Datei: " + f.getAbsolutePath());
		System.out.println("Größe: " + f.length() + " Bytes\n\n");
		
		try {
			BufferedReader reader= new BufferedReader(new FileReader(f));
			while (true) {
				try {
					String line = reader.readLine();
					if (line != null) {
//						System.out.println(line);
						if (isMethodStart(line)) { 		/* falls methode beginnt, suche nach ende */
							methodCount += 1;
							createTxtFile(methods[methodCount]);
							fillMethodFile("methods[" + methodCount + "].txt", line);
							if (line.contains("{"))
								open=1; /* opened bracket of method's first line */
							else
								open=0; 
							while (true) {
								String line2 = reader.readLine();
								fillMethodFile("methods[" + methodCount + "].txt", line2);
//								System.out.println(line2);
								if (isMethodEnd(line2)) {
									break;
								}
							}
						}
					}
					else
						break;
				} 
				catch (IOException e) {
					e.printStackTrace();
				}
			}	
		} 
		catch (FileNotFoundException fnfe) {
			fnfe.printStackTrace();
		} 
	}


	/**
	 * writes lines of code into the methodFile
	 * @param methodFileName name of methodFile
	 * @param line line of code to be written
	 */
	private void fillMethodFile(String methodFileName, String line) {
		File methodFile = new File(dir, methodFileName);
		line = line.concat("\n");
		
		try {			
			Writer out = new BufferedWriter(new FileWriter(methodFile));
			out.write(line, (int) methodFile.length(), line.length());
//			out.append(line);
			out.flush();
			out.close();
		} 
		catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	/**
	 * creats new txtFile if a method was Found. TxtFile will be named "methods[number_of_method]".
	 * @param file file to create 
	 * @return true if the file did not exist yet and was created successfully
	 */
	private boolean createTxtFile(File file) {	
		String filename = "methods[" + methodCount + "].txt";
		try {
			return new File(dir, filename).createNewFile();
		} 
		catch (IOException e) {
			System.out.println("Konnte Datei nicht erstellen:");
			e.printStackTrace();
		}		
		return false; /* this line will never be reached */
	}
	
	
	/**
	 * @param line line of code to check
	 * @return true if line of code shows that a method ends here
	 */
	private boolean isMethodEnd(String line) {
		boolean isMethodEnd = false;
		if (line.contains("{"))
			open+=1;
		if (line.contains("}"))
			open-=1;
		if (open==0)
			isMethodEnd = true;	
		return isMethodEnd;
	}

	/**
	 * @param line line of code to check
	 * @return true if line of code shows that a method starts here
	 */
	private boolean isMethodStart(String line) {
		boolean isMethodStart = false;
		
		if ( (!line.contains("=")) && (!line.contains("class")) && 
				( (line.contains("void")) || (line.contains("static")) || (line.contains("public"))	
				|| (line.contains("int")) || (line.contains("int")) || (line.contains("long")) ) )
			isMethodStart=true;		
		
		return isMethodStart;
	}
}

Code:
package struktoGen;

import java.io.File;


/**
 * starts the application
 * @author Norman
 */
public class Testklasse {

	public static void main(String[] args) {
		new FileSplitter(new File("struktoGen\\Struktogramm.java"));

	}

}

Code:
package struktoGen;

public class Struktogramm {

	static int addition(int a, int b) {
		return a+b;
	}
	
	static long fakul(int zahl) {
		long fak=1L;
		for (int i=zahl; i>1; i--) {
			fak = fak * i;
		}
		return fak;
	}
	
	public static void main(String[] args) {
		addition(3,5);
		fakul(6);
	}
}
 

norman

Top Contributor
zum testen kann Z. 43 auskommentiert werden. dann steht jeweils die erste Zeile der methode in der datei.

ohne kommentar enthalten die dateien nur die letzte zeile der jeweiligen methode (" } ").

MfG
 

thE_29

Top Contributor
Zeile 75:

new FileWriter(BLA);


=> lies dir die API durch!!

es gehört new FileWriter(BLA,true);


Damit die Datei nicht überschrieben wird!



Nachtrag: ich kann dir nicht glauben schenken, das du schonmal mit append probiert hast, weil es funktioniert bei jedem, nur bei dir solls net klappen?!?
 

norman

Top Contributor
krass. danke.

wozu sind dann aber die argumente in der write-methode?
die api sagt hier, das 2 argument ist der offset wert. also müsste er doch, wenn dieses argument zb 12 ist, nach den ersten 12 buchstaben beginnen zu schreiben?
 

thE_29

Top Contributor
Nö!

Der offset gibt an, wo er deinen byte Wert auslesen soll!


byte ar[] = new byte[20];


sagst du nen write(ar,5,15);

so überspring er dir die ersten 5 Zeichen von dem Array!

Das hat aber nix mit dem Inhalt der Datei zum tun, sondern mit dem was er neu reinschreiben soll!!


Merken: Beim Datei aufmachen muss man schon angeben ob und wie eine Datei geöffnet werden soll (zB RandomAccessFile, FileWriter, etc).

Dort sagt man zB autoflush, append, nur lesen, etc!

Nachher mit den Readern/Writern geht das nicht mehr!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
F Auto String mit Array Name aus Datei... oder so ähnlich Java Basics - Anfänger-Themen 4
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
J String in Datei schreiben Java Basics - Anfänger-Themen 4
B HTML Datei einlesen und HTML Code in String wandeln Java Basics - Anfänger-Themen 19
R String index out of range: -1 beim Datei Parsen Java Basics - Anfänger-Themen 15
B Datei mit String verbinden und speichern Java Basics - Anfänger-Themen 3
E String[] aus Datei Java Basics - Anfänger-Themen 5
D String in Datei suchen und löschen Java Basics - Anfänger-Themen 2
J .txt Datei "einlesen "und in String speichern ergibt immer NULL Java Basics - Anfänger-Themen 17
P CSV Datei in String Array -> Split -> New Array Java Basics - Anfänger-Themen 2
S Input/Output Sehr langen String in Datei schreiben Java Basics - Anfänger-Themen 8
B String der eigentlich eine Ansammlung von HEX zeichen ist in datei schreiben in Hex Java Basics - Anfänger-Themen 8
D txt-Datei zeilenweise als String einlesen Java Basics - Anfänger-Themen 2
E String in txt datei schreiben? Java Basics - Anfänger-Themen 4
D String array in Datei speichern Java Basics - Anfänger-Themen 3
L Problem beim Einlesen einer Datei in einen String Java Basics - Anfänger-Themen 12
M String Datei in Float-Matrix umwandeln Java Basics - Anfänger-Themen 8
I .csv-Datei einlesen klappt aber kann nicht in String geschrieben werden!?!?! Java Basics - Anfänger-Themen 11
F \n aus String in Datei schreiben Java Basics - Anfänger-Themen 5
L String suchen und ersetzten, ohne neue Datei Java Basics - Anfänger-Themen 4
P String übergeben an 2. Datei (Funktion) Java Basics - Anfänger-Themen 4
U String lässt sich nicht in txt datei schreiben! Java Basics - Anfänger-Themen 7
C String aus Datei unterteilen - wie? Java Basics - Anfänger-Themen 17
M String in csv Datei speichern Java Basics - Anfänger-Themen 7
M .txt datei "einlesen" und in String speichern! Java Basics - Anfänger-Themen 15
F Datei suchen --> Pfad als String speichern Java Basics - Anfänger-Themen 8
Developer_X jede Zeile einer Datei mit einem String verketten Java Basics - Anfänger-Themen 16
H2SO3- kompletten string aus datei auslesen (nicht .readline) Java Basics - Anfänger-Themen 21
alexpetri Datei in String lesen Java Basics - Anfänger-Themen 6
G STRING IN DATEI NEU ANORDNEN Java Basics - Anfänger-Themen 3
N String/char-array aus datei auslesen Java Basics - Anfänger-Themen 2
Z Datei einlesen in ein String und weiter verwenden Java Basics - Anfänger-Themen 3
B String-Array in Datei speichern und wieder auslesen Java Basics - Anfänger-Themen 3
M String aus Datei auslesen - Medung Leeres Parameterfeld Java Basics - Anfänger-Themen 4
C String in eine *.ini-Datei Java Basics - Anfänger-Themen 29
M String in Datei hinzufügen Java Basics - Anfänger-Themen 5
B String aus Datei lesen + Länge berechnen Java Basics - Anfänger-Themen 2
N RandomAccessFile(File, String) erstellt datei?! Java Basics - Anfänger-Themen 6
F Veränderter String in neue Datei einschreiben bzw. überschre Java Basics - Anfänger-Themen 3
J Lesen einer Datei in einen String oder Char? Java Basics - Anfänger-Themen 3
T mit einem string der form"[url]http://www.*.*/*"[/url] datei Java Basics - Anfänger-Themen 3
R Werte aus einem String[][] in eine Datei schreiben. Java Basics - Anfänger-Themen 3
J Datei öffnen und String durch einen anderen String ersetzen. Java Basics - Anfänger-Themen 15
J String in externe Datei speichern Java Basics - Anfänger-Themen 2
V Passwort-String byteweise in eine Datei schreiben Java Basics - Anfänger-Themen 6
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
E String zerlegen aus args Java Basics - Anfänger-Themen 1
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
J String Filter Java Basics - Anfänger-Themen 5
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D 2D Char Array into String Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
I Zerlegen von String Java Basics - Anfänger-Themen 3
B Beliebiger String gegeben Suche Datum in String Java Basics - Anfänger-Themen 6
I String Java Basics - Anfänger-Themen 4
I API - zurückgegebener JSON String lesen und in Entity konvertieren Java Basics - Anfänger-Themen 2
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
Substring in einem String finden Java Basics - Anfänger-Themen 13
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
I Eindeutiger String mit maximaler Anzahl an Zeichen Java Basics - Anfänger-Themen 11
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
Alen123 String wiederholen mit Schleifen Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben