0

我希望将用户输入的所有纬度和经度数据写入WriteGPSData.txt。但是这段代码只写了纬度和经度的最后一个输入。帮我解决这个问题。

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JOptionPane;

public class GPS_main {

    public static void main(String[] args) {
        String strFilePath = "WriteGPSData.txt";
        try {
            System.out.println("+++=====GPS POINTS=======+++");
            // GPS p1 = new GPS ();
            GPS[] p2;
            p2 = new GPS[3];
            p2[0] = new GPS();
            // GPS p2 = new GPS();
            for (int i = 0; i < p2.length; i++) {
                p2[i] = new GPS();
                String aa = JOptionPane.showInputDialog("Enter latitude: ");
                double a = Double.parseDouble(aa);
                p2[i].setLat(a);
                String bb = JOptionPane.showInputDialog("Enter longitude: ");
                double b = Double.parseDouble(bb);
                p2[i].setLon(b);
                // System.out.println(p2[i].toGPSString());
                FileOutputStream fos = new FileOutputStream(strFilePath);
                DataOutputStream dos = new DataOutputStream(fos);
                String a2 = Double.toString(a);
                String b2 = Double.toString(b);
                // System.out.println("hello"+a2+b2);
                dos.writeBytes(a2 + "  " + b2);
                dos.close();
            }
        } catch (IOException e) {
            System.out.println("IOException : " + e);
            // System.out.println("   ");
        }
    }
}

在 BlueJ 中运行

4

2 回答 2

4

将这些行放在开头的 for 循环之外:

 FileOutputStream fos = new FileOutputStream(strFilePath);     
  DataOutputStream dos = new DataOutputStream(fos);

并在写入完成后关闭 OutputStream。您可以在其中使用finally()和写入dos.close();

在您的代码中,每次迭代都会创建一个新文件,因此会覆盖旧数据。

于 2013-04-23T12:59:49.700 回答
3

线条

FileOutputStream fos = new FileOutputStream(strFilePath);
DataOutputStream dos = new DataOutputStream(fos);

应该在进入for循环之前出现。否则,输出文件本身的内容在每次迭代中都会被截断。此外,您还需要DataOutputStream在循环完成后推迟关闭

dos.close();
于 2013-04-23T13:00:00.697 回答