我希望用户输入的所有纬度和经度数据都写入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中运行
答案 0 :(得分:4)
将这些行保留在开头的循环中:
FileOutputStream fos = new FileOutputStream(strFilePath);
DataOutputStream dos = new DataOutputStream(fos);
写完成后关闭OutputStream。您可以使用finally()
并在其中写下dos.close();
。
在您的代码中,每次迭代都会创建一个新文件,因此会覆盖旧数据。
答案 1 :(得分:3)
行
FileOutputStream fos = new FileOutputStream(strFilePath);
DataOutputStream dos = new DataOutputStream(fos);
应在进入for
循环之前出现。否则,输出文件本身的内容将在每次迭代中被截断。此外,您需要推迟关闭DataOutputStream
,直到循环完成
dos.close();