我的.dat文件无法显示双号

时间:2015-10-24 08:16:12

标签: java java-io datainputstream dataoutputstream

我使用以下代码创建了sales.dat:

public static void main(String[] args) throws IOException {

    DataOutputStream output = new DataOutputStream
            (new FileOutputStream("E:/HOMEWORK/OOP/OOP-java/src/week2/sales.dat"));

    output.writeChars("San Francisco: ");
    output.writeDouble(1123.456);


}

当我打开sales.dat时,这里是:

enter image description here

我写了另一个类来读取.dat文件:

public static void main(String[] args) throws IOException {

    File file = new File("E:/HOMEWORK/OOP/OOP-java/src/week2/sales.dat");
    FileReader reader = new FileReader(file);

    char[] buffer = new char[4*1024];
    int read = -1;

    StringBuilder builder = new StringBuilder();
    while( (read = reader.read(buffer)) !=-1){
        builder.append(buffer,0,read);
    }
    System.out.println(builder);


//              

}

结果是:

enter image description here

所以plz帮助我,输出必须是:" San Francisco: 1123.456 "

4 个答案:

答案 0 :(得分:0)

您应该使用DataInputStream来阅读。

public static void main(String[] args) throws IOException {
        String name = "...";
        DataOutputStream output = new DataOutputStream
                (new FileOutputStream(name));
        output.writeUTF("San Francisco: ");
        output.writeDouble(1123.456);
        output.close();
}

public static void main(String[] args) throws IOException {
    String name = "C:/Users/hsivakumar/Downloads/sales.dat";

    DataInputStream reader = new DataInputStream(new FileInputStream(name));

    StringBuilder builder = new StringBuilder();
    builder.append(reader.readUTF());
    builder.append(reader.readDouble());
    reader.close();
    System.out.println(builder);
}

答案 1 :(得分:0)

您的期望不正确。 Name2写入二进制文件,而不是可读文本。您的阅读程序应该使用writeDouble(),如果您可以计算出之前要读取的字符数。您的输出文件设计不佳。

答案 2 :(得分:-1)

您需要使用DataInputStream来显示double值:

  public static void main(String[] args)
        throws IOException {

        DataOutputStream output = new DataOutputStream(new FileOutputStream("c:/tmp/sales.dat"));
        output.writeUTF("San Francisco: ");
        output.writeDouble(1123.456);
        output.close();

        DataInputStream reader = new DataInputStream(new FileInputStream("c:/tmp/sales.dat"));
        String test = String.format("%s%s", reader.readUTF(), reader.readDouble());
        System.out.println(test);

    }

答案 3 :(得分:-1)

好的,这似乎是您遇到的问题,可能是因为您没有刷新字节。  可以请检查

output.flush();

在对文件写入double之后,还有一件事请先通过将double值放入Variable中来尝试,然后再写入该变量。

让我知道是否能解决这个问题。干杯