如何在java程序中打开.dat文件

fly*_*ina 4 java file-io

我在一个扩展名为.dat的文件中传递了一些数据.我需要在java程序中读取这些数据,并将数据构建到我们定义的一些对象中.我尝试了以下,但它没有用

FileInputStream fstream = new FileInputStream("news.dat");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
Run Code Online (Sandbox Code Playgroud)

有人能告诉我如何在java中这样做吗?

Bal*_*usC 8

它是什么类型的文件?它是包含序列化Java对象的二进制文件吗?如果是这样,那么你宁愿需要ObjectInputStream而不是DataInputStream阅读它.

FileInputStream fis = new FileInputStream("news.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
Object object = ois.readObject();
// ...
Run Code Online (Sandbox Code Playgroud)

(不要忘记使用close()in 正确处理资源finally,但这超出了本问题的范围)

也可以看看:


And*_*yle 8

一个.dat文件通常是一个二进制文件,没有任何具体的相关格式.您可以以与发布的方式类似的方式读取文件的原始字节 - 但您需要根据基础格式解释这些字节.特别是,当你说"开放"的文件,什么究竟你想在Java中出现呢?你想要创建什么样的对象?字节流应如何映射到这些对象?

一旦你知道了这一点,你可以自己编写这个图层,也可以使用现有的API(假设它是标准格式).

作为参考,您的示例不起作用,因为它假定二进制格式是平台的默认字符集中的字符表示(根据InputStreamReader构造函数).正如你所说的二进制,这将无法将二进制转换为字符流(因为,毕竟,它不是).

// BufferedInputStream not strictly needed, but much more efficient than reading
// one byte at a time
BufferedInputStream in = new BufferedInputStream (new FileInputStream("news.dat"));
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个缓冲流,它将返回文件的原始字节; 您现在可以自己读取和处理它们,或者将此输入流传递给某些库API,该API将为您创建适当的对象(如果存在这样的库).