0

我对 JAVA 很陌生,所以我真的看不出我在以下方法中做错了什么:

public void writeWNDFile(){
        String strFilePath = "C:/Users/fperrone/Desktop/ddd.txt";
        try
        {
          //create FileOutputStream object
          FileOutputStream fos = new FileOutputStream(strFilePath);

           DataOutputStream dos = new DataOutputStream(fos);
           dos.writeDouble(12);            
           dos.close();
        }
        catch (IOException e)
        {
          System.out.println("IOException : " + e);
        }
    }

该文件实际上是生成的,但我没有得到12打印和预期的结果,但是@(,这可能是 ASCII 表示。

你能解释一下吗?

编辑

最终是否存在一个JAVA行为与该函数相似的MATLAB fwrite函数?我实际上想写一个二进制文件。MATLAB我只是在打电话:

fwrite(filename, A, precision)

我怎样才能达到同样的效果JAVA

4

3 回答 3

1

DataOutputStream.writeDouble和其他方法DataOutputStream旨在以二进制格式写入数字。如果您希望您的数据以文本格式保存,请使用FileWriter它的write(String)方法。您可以转换doubleStringwith Double.toString(double)

于 2013-07-12T09:34:29.593 回答
1

来自writeDouble java 文档

使用 Double 类中的 doubleToLongBits 方法将 double 参数转换为 long,然后将该 long 值作为 8 字节数量写入底层输出流,先是高字节。

由于 DataOutputStream 使用二进制格式进行写入,因此您看到的是相同的。但是,如果要使用 DataInputStream 和 readDouble 方法再次读取文件,则需要担心。它应该给你正确的价值观。

于 2013-07-12T09:33:58.263 回答
0
  //PrintWriter out = new PrintWriter(new BufferedWriter(
  //    new OuputStreamWriter(new FileOutputStream(strFilePath) /*, "UTF-8"*/)));
  PrintWriter out = new PrintWriter(strFilePath /*, "UTF-8"*/);
  out.println(12);
  out.close();

当您希望应用程序在各处使用相同的编码进行写入时,请添加编码,此处为 UTF-8。否则使用默认平台编码。

PrintWriter添加了一个println换行符,print而不是。

于 2013-07-12T09:46:51.257 回答