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

My .dat file can't display double number

我用这些代码创建了我的 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 时,它是:

我写了另一个class来读取.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);


//              

}

结果是:

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

您需要使用 DataInputStream 来显示双精度值:

  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);

    }

你应该使用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);
}

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

output.flush();

在将 double 写入文件后,还有一件事请尝试先将 double 值放入变量,然后再写入该变量。

让我知道这是否为您解决了这个问题。干杯

您的期望不正确。 writeDouble() 写入二进制不可读文本。你的阅读程序应该使用 readDouble(),如果你能算出在它之前要阅读多少个字符的话。您的输出文件设计不当。