使用DataOutputStream将带有数组的字符串作为字节写入文件

时间:2013-04-23 12:54:03

标签: java dataoutputstream

我希望用户输入的所有纬度和经度数据都写入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中运行

2 个答案:

答案 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();