Search code examples
javajava-iodatainputstreamdataoutputstream

My .dat file can't display double number


I created my sales.dat with these code:

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


}

And when I opened sales.dat, here it is:

enter image description here

I wrote another class to read .dat file:

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


//              

}

And the result is :

enter image description here

So plz help me, the output must be :" San Francisco: 1123.456 "


Solution

  • You should use DataInputStream to read.

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