保存Notepad.txt链表
-
19-09-2019 - |
题
我绘制许多三角形多边形,并将其存储在链接列表。我的问题是,当我绘制存储在一个记事本文件,数据无法读取(奇怪的符号)。当我尝试打印使用它的println输出是这样java.awt.Polygon@1d6096。
如何存放在记事本中多边形的坐标?
...
java.util.List<Polygon> triangles = new LinkedList<Polygon>();
String pathname = "eyemovement.txt";
...
int[] xs = { startDrag.x, endDrag.x, midPoint.x };
int[] ys = { startDrag.y, startDrag.y, midPoint.y };
triangles.add(new Polygon(xs, ys,3));
...
public void actionPerformed(ActionEvent e) {
if(e.getSource() == saveBtn){
try {
FileOutputStream fos = new FileOutputStream(pathname);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(triangles);
oos.flush();
oos.close();
fos.close();
}
catch (Exception ex) {
System.out.println("Trouble writing display list vector");
}
}
编辑:
我已经尝试了所有的建议,但我仍然不能设法得到的输出如下所示。我曾尝试“的PrintWriter”为好,但我不能解决了这个问题。帮助我,请我的头好重本: - (
我画三角形,进行更改,并将其存储在链表。画完后,并进行修改,我点击保存按钮,并将其与希望,我会在记事本中输出像这样保存Notepad.txt:
40 60 50这个线表示顶点的三角形1,点击两个X 40 40 50这个线表示顶点的三角形1的伊苏
60 80 70 2三角结果 60 60 70
100 120 110 3三角形搜索 100 100 110
解决方案
实际上没有人发布这样做绝对的最简单的方法,所以在这里不言而喻。
以一个Polygon p
,输出表示p
的x / y坐标的形式的(假设p
具有至少1点) “(X1 Y1,X2 Y2,X3 Y3,...)” 的字符串:
System.out.print("(" + p.xpoints[0] + p.ypoints[0]);
for (int i = 0; i < p.npoints; i++) {
System.out.print(", " + p.xpoints[i] + " " + p.ypoints[i]);
}
System.out.println(")");
其他提示
如果您只想存储坐标,只有想写一个方法(到文件),那么你应该在你的多边形写重载方法:
String toString() {
return this.x + ", " + this.y;
}
或类似的东西。
当然的数据是不可读的。这是“数据”,而不是“文本”。你必须与ObjectInputStream
类再次读取该文件。使用的方法`的readObject();该方法返回一个对象。当然,你必须将其丢在这种方式:
Object o = ois.readObject(); // ois is the ObjectInputStream
List<Polygon> list = new ArrayList<Polygon>((List) o));
我觉得你只是想保存的三角形,继续关闭程序后,与它一起工作。
我开始与一个测试用例。
import java.awt.Polygon;
import junit.framework.TestCase;
public class PolygonTest extends TestCase {
public void testToString() throws Exception {
Polygon polygon = new Polygon();
polygon.addPoint(0, 1);
polygon.addPoint(1, 1);
polygon.addPoint(1, 0);
assertEquals("(0,1;1,1;1,0)", polygon.toString());
}
}
我在此假设您正在使用AWT Polygon类。这个测试失败,因为AWT的多边形类没有覆盖缺省行为。但是多边形有很多的好东西在里面,你不想失去(也许),所以要加,我们希望新的行为(一个toString()方法),让我们改变这只是一点点:
import java.awt.Polygon;
import junit.framework.TestCase;
public class PolygonTest extends TestCase {
public void testToString() throws Exception {
Polygon polygon = new Triangle();
polygon.addPoint(0, 1);
polygon.addPoint(1, 1);
polygon.addPoint(1, 0);
assertEquals("(0,1;1,1;1,0)", polygon.toString());
}
}
这甚至不编译,因为三角类尚不存在。因此,让我们创建它(我使用eclipse,我会跑的QuickFix创建类对我来说):
import java.awt.Polygon;
public class Triangle extends Polygon {
}
和现在的测试编译,但如之前失败。因此,让我们写出toString()方法:
import java.awt.Polygon;
public class Triangle extends Polygon {
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("(");
for (int i = 0; i < npoints; i++)
sb.append(String.format("%s,%s;", xpoints[i], ypoints[i]));
sb.deleteCharAt(sb.length() - 1); // get rid of the final semicolon
sb.append(")");
return sb.toString();
}
}
和现在测试通过。
请注意,我改变的格式从你的要求是什么一点点,因为我认为你可能希望能够点(5,17)和点之间进行区分(51,7)。