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
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);
}
}