FileWriter删除了Java.awt.Point

时间:2013-05-11 03:28:39

标签: java filewriter

我正在创建一个会打印出位置坐标的程序。当它将它打印到文件时,它看起来像这样:

Car id   distance #spots

java.awt.Point[x=1,y=1]
java.awt.Point[x=2,y=0]

java.awt.Point[x=1,y=0]

car0 java.awt.Point[x=0,y=0] java.awt.Point[x=1,y=0] 1

car1 java.awt.Point[x=2,y=0] java.awt.Point[x=2,y=0] 2

我试图摆脱java.awt.Point显示,所以它只显示坐标。

继承我的代码:     public void saveGrid(File name)抛出FileNotFoundException     {

    ArrayList<Car> cars = getCars();
    ArrayList<ParkingSpot> spots = getSpots();

    PrintWriter fileWriter;
    try {
        fileWriter = new PrintWriter(name);


        fileWriter.println("hi");

        fileWriter.println("\n\nCar id   distance #spots\n");
        fileWriter.println(getPartyLocation());


        for(ParkingSpot spot: spots){
            fileWriter.println(spot.getLocation());
            fileWriter.println("");
        }
        for (Car car: cars) {
            fileWriter.println(car.getId() + " " + car.getStart() + " " + car.getLocation() + " " + car.getNumSpotsTried());
            fileWriter.println("");

        }



        fileWriter.close();
    } catch (FileNotFoundException e) {
        System.err.println("FileWriting error:" + e);
        e.printStackTrace();
    }

2 个答案:

答案 0 :(得分:3)

当您向字符串添加car.getLocation()时,您正在添加Point个对象。它隐式转换为toString()的字符串。 toString的{​​{1}}方法是:

java.awt.Point

基本上是:

public String toString() {
    return getClass().getName() + "[x=" + x + ",y=" + y + "]";
}

您可以执行以下操作,而不是依赖此默认行为:

public String toString() {
    return "java.awt.Point[x=" + x + ",y=" + y + "]";
}

答案 1 :(得分:1)

正在打印java.awt.Point内容,因为您的gridSave方法隐式调用java.awt.Point.toString() ......这就是它产生的内容。 (典型的toString()旨在生成调试输出,并且在该上下文中包含类名。)

你的可能性是:

  • 使用Point方法编写您自己的toString()课程,该方法以您希望的格式输出位置。
  • 创建java.awt.Point的子类,该子类将覆盖toString()方法。
  • 请勿使用Point.toString()方法。相反,请编写String formatLocation(Point)方法来格式化Point您希望的方式,并在gridSave方法中使用它。