我正在尝试生成随机数并将它们写入文件,然后打印它们。相反,诸如此0.0的所有零都在控制台中按行打印,并且在文件中以ASCII代码编写。
我已经使用不同的java输入类并使用随机数生成器。
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
import java.util.Random;
public static void main(String[] args) throws IOException {
makefile(10, "inputHW02.txt");
double[] sizearray0 = new double[10];
int i = 0;
Scanner inFile;
inFile = new Scanner(new File("inputHW02.txt"));
while (inFile.hasNextDouble()) {
sizearray0[i] = inFile.nextDouble();
i++;
}
for (int r = 0; r < sizearray0.length; r++)
System.out.println(sizearray0[r]);
inFile.close();
}
public static void makefile(double n, String filename) throws IOException {
FileOutputStream writer = new FileOutputStream(filename);
DataOutputStream dos = new DataOutputStream(writer);
Random rand = new Random();
for (int i = 0; i < n; i++) {
dos.writeInt((int) 60);
;
}
if (writer != null) {
writer.flush();
writer.close();
}
}
我希望文件和输出控制台应该在新行上分隔随机数,例如10.0 23.0 1.0等等。
我们使用PrintWriter
而不是DataOutputStream
写入文件的原因更好地解释了here。
public static void makefile(double n, String fileName) throws IOException {
FileWriter fileWriter = new FileWriter(fileName);
PrintWriter printWriter = new PrintWriter(fileWriter);
Random rand = new Random();
for (int i = 0; i < n; i++) {
printWriter.println(rand.nextDouble()); // <--- observe this
}
if (printWriter != null) {
printWriter.flush();
printWriter.close();
}
}
也,
rand
。printWriter.println()
将在每行写入文件后添加换行符。DataInputStream
/ DataOutputStream
类以二进制格式读/写数据。而扫描仪以文本格式读取数据。
这意味着您正在为文件写入等价的整数60,并且在读取时,您正在尝试读取字符串“60”。
简而言之:
DataInputStream
编写的数据,请使用DataOutputStream
。Scanner
写入文件,请使用FileReader
或FileWriter
。您的代码不使用rand。如果我在你的情况下,我会使用PrintWriter或BufferedWriter,它使它更简单