我的 .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()
,如果你能算出在它之前要阅读多少个字符的话。您的输出文件设计不当。
我用这些代码创建了我的 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()
,如果你能算出在它之前要阅读多少个字符的话。您的输出文件设计不当。