在将双打写入文本文件时,我似乎遗漏了一些东西,当我检查文件时,只有空白区域。当我从文件中读取并使用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();
}
}
答案 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值并写入之前的文件。