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

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

FileInputStream fstream = new FileInputStream("news.dat"); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 

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

它是什么类型的文件? 它是包含序列化Java对象的二进制文件吗? 如果是这样,那么您更需要ObjectInputStream而不是DataInputStream来读取它。

 FileInputStream fis = new FileInputStream("news.dat"); ObjectInputStream ois = new ObjectInputStream(fis); Object object = ois.readObject(); // ... 

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

也可以看看:

  • 基本序列化教程

.dat文件通常是二进制文件,没有任何特定的关联格式。 您可以以与发布的方式类似的方式读取文件的原始字节 – 但您需要根据基础格式解释这些字节。 特别是,当你说“打开”文件时,你想在Java中发生什么? 你想要创建什么样的对象? 字节流应如何映射到这些对象?

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

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

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

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

这完全取决于.dat是什么类型的文件。 不幸的是,.dat通常用作数据文件的通用扩展。 它可以是二进制的,在这种情况下你可以使用FileInputStream fstream = new FileInputStream(new File("news.dat")); 并调用read()从文件或文本中获取字节,在这种情况下,您可以使用BufferedReader buff = new BufferedInputReader(new FileInputStream(new File("news.dat"))); 并调用readLine()来获取每行文本。 [编辑]或者它可能是Java对象,在这种情况下,BalusC说的是什么。[/ edit]

在这两种情况下,您都需要知道文件的格式是什么,以便将事物分开并从中获得意义,尽管如果它是文本可以通过检查完成,这会更容易。

请尝试以下代码:

 FileReader file = new FileReader(new File("File.dat")); BufferedReader br = new BufferedReader(file); String temp = br.readLine(); while (temp != null) { temp = br.readLine(); System.out.println(temp); } 

更好的方法是使用try-with-resources,这样您就不必担心关闭资源了。

这是代码。

  FileInputStream fis = new FileInputStream("news.dat"); try(ObjectInputStream objectstream = new ObjectInputStream(fis)){ objectstream.readObject(); } catch(IOException e){ // }