将双打写入文件的问题,什么都不写

时间:2017-12-08 21:13:43

标签: java

在将双打写入文本文件时,我似乎遗漏了一些东西,当我检查文件时,只有空白区域。当我从文件中读取并使用System.out.println()打印时;它什么都不打印......这里出了什么问题?我需要做一些转换吗?

import java.io.*;
import javax.swing.JOptionPane;

public class ReadCalcAveragePrint  {

    double firstNum;
    double secondNum;
    double average;

    public void readFile() {

        try {
            File f = new File("numbers.txt");
            BufferedReader br = new BufferedReader(new FileReader(f));
            String one = br.readLine();
            String two = br.readLine();
            firstNum = Double.parseDouble(one);
            secondNum = Double.parseDouble(two);

            average = (firstNum + secondNum) / 2;
            JOptionPane.showMessageDialog(null, average, "title", JOptionPane.PLAIN_MESSAGE);

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e);
        }

    }

    public void writeFile() {
        try {
            File f = new File("result.txt");
            FileOutputStream fos = new FileOutputStream(f);
            DataOutputStream dos = new DataOutputStream(fos);
            dos.writeDouble(average);
            dos.flush();
            fos.close();
            System.out.println("Printed.");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e);

        }
    }

    public void readResult() {

        try {
            File f = new File("result.txt");
            BufferedReader br = new BufferedReader(new FileReader(f));
            String one = br.readLine();
            System.out.println(one);

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e);
        }

    }

    public static void main(String[] args) {

        new ReadCalcAveragePrint().readFile();
        new ReadCalcAveragePrint().writeFile();
        new ReadCalcAveragePrint().readResult();
    }
}

2 个答案:

答案 0 :(得分:3)

在你创建3个不同对象的main中,只有第一个会包含你从文件中读取的数字。

您应该只创建并重用一个对象:

public static void main(String[] args) {
    ReadCalcAveragePrint obj = new ReadCalcAveragePrint();
    obj.readFile();
    obj.writeFile();
    obj.readResult();
}

此外,您正在使用DataOutputStream编写结果文件,该文件旨在以二进制形式写入数据。如果您只想将结果保存为文本,则应使用FileWriter代替:

File f = new File("result.txt");
FileWriter fw = new FileWriter(f);
fw.write(String.valueOf(average));
fw.close();

答案 1 :(得分:0)

查看writeDouble的javadoc:

  

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

你写了8个字节,可能没有分配给任何字母数字字符。然后你将它读作一个字符串作为字符串(字符直到下一个'新行'字符)。 在这种情况下,“新行”字符可以是任何地方,也可以是任何地方(取决于结果)。

文件中的8个字节意味着几乎4个字符,很可能,没有人是“可见字符”。

尝试从InputStream中读取byte[8](而不是从缓冲区读取),然后将这8个字节放入DoubleBuffer,然后您可以获取由这些字节表示的double值并写入之前的文件。