Hallo,
ich habe ein Problem mit der replace()-Methode, oder mit der writer()-Methode, besser gesagt ich weiss nicht so genau, wo ich, was ändern muss.
Das ist der Code, in Zeile 119 möchte ich die veränderten Zeilen in die Ausgabedatei schreiben, das klappt auch aber oldPl und changedPl ändern sich zwischendurch, und in die Ausgabedatei kommt nur die letzten Versionen, ist ja klar, weil die Variablen überschrieben werden, aber was kann ich machen damit das nicht passiert. Vielen Dank für die Antworten,
Butterfly
ich habe ein Problem mit der replace()-Methode, oder mit der writer()-Methode, besser gesagt ich weiss nicht so genau, wo ich, was ändern muss.
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class XFigData {
private ArrayList<XFigLine> lines = new ArrayList<XFigLine>();
private Grid grid = new Grid();
private ArrayList<Rectangle> rectangles = new ArrayList<Rectangle>();
public Point textP = null;
public ArrayList<Rectangle> rText = new ArrayList<Rectangle>();
public XFigData(String fileName) throws IOException {
readData(fileName);
processRectangles();
}
private void readData(String fileName) throws IOException {
BufferedReader in = new BufferedReader(new FileReader(fileName));
String line;
XFigLine currentLine;
PolyLine pl;
while ((line = in.readLine()) != null) {
if (line.startsWith("2")) {
String line2 = in.readLine();
currentLine = new XFigLine(line + "\n" + line2);
StringTokenizer st = new StringTokenizer(line2);
Point p1 = new Point(Integer.parseInt(st.nextToken()),
Integer.parseInt(st.nextToken()));
Point p2 = new Point(Integer.parseInt(st.nextToken()),
Integer.parseInt(st.nextToken()));
pl = new PolyLine(new Segment(p1, p2));
while (st.hasMoreTokens()) {
pl.addPoint(new Point(Integer.parseInt(st.nextToken()),
Integer.parseInt(st.nextToken())));
}
currentLine.setShape(pl);
} else {
currentLine = new XFigLine(line);
}
lines.add(currentLine);
}
in.close();
}
private void processRectangles() {
for (XFigLine l : lines) {
if (l.getShape() instanceof PolyLine) {
PolyLine pl = (PolyLine) l.getShape();
if (pl.isRectangle()) {
Rectangle r = pl.toRectangle();
rectangles.add(r);
grid.addRectangle(r);
}
}
}
grid.endOfRectangles();
}
String oldPl, changedPl;
public void repairPolyLines() throws IOException {
for (XFigLine l : lines) {
if (l.getShape() instanceof PolyLine) {
PolyLine pl = (PolyLine) l.getShape();
if (!pl.isRectangle()) {
for (Rectangle r : rectangles) {
if (pl.doesIntersect(r)) {
l.setShape(grid.findPath(pl.getStartPoint(),
pl.getEndPoint()));
changedXfigData(pl, l);
grid.cleanGrid();
break;
}
}
}
}
}
}
private void changedXfigData(PolyLine pl, XFigLine l) {
String newCoord, oldCoord, oldNumber, newNumOfPoints, changedNumOfPoints, firstLine;
newCoord = "\n" + " "
+ grid.findPath(pl.getStartPoint(), pl.getEndPoint());
newNumOfPoints = "" + grid.getLength();
oldCoord = l.getText().substring(l.getText().indexOf("\n"));
oldNumber = l.getText().substring(0, 38);
changedNumOfPoints = replaceCharAt(l.getText(), 37, newNumOfPoints);
firstLine = changedNumOfPoints.substring(0, 38);
changedPl = firstLine + "" + newCoord;
oldPl = oldNumber + "" + oldCoord;
}
public static String replaceCharAt(String s, int pos, String i) {
return s.substring(0, pos) + i + s.substring(pos + 1);
}
public void write(String filename) throws IOException {
BufferedWriter writer;
writer = new BufferedWriter(new FileWriter(filename));
for (XFigLine l : lines) {
writer.write(l.getText().replace(oldPl, changedPl));
writer.newLine();
writer.flush();
}
writer.close();
}
public String toString() {
return grid.toString();
}
}
Das ist der Code, in Zeile 119 möchte ich die veränderten Zeilen in die Ausgabedatei schreiben, das klappt auch aber oldPl und changedPl ändern sich zwischendurch, und in die Ausgabedatei kommt nur die letzten Versionen, ist ja klar, weil die Variablen überschrieben werden, aber was kann ich machen damit das nicht passiert. Vielen Dank für die Antworten,
Butterfly