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

时间:2010-07-30 15:50:16

标签: java file-io

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

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

有人可以告诉我如何在java中执行此操作吗?

5 个答案:

答案 0 :(得分:8)

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

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

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

另见:

答案 1 :(得分: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"));

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

答案 2 :(得分:3)

这完全取决于.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]

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

答案 3 :(得分:1)

请尝试以下代码:

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);
}

答案 4 :(得分:0)

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

这是代码。

    FileInputStream fis = new FileInputStream("news.dat");
    try(ObjectInputStream objectstream = new ObjectInputStream(fis)){

          objectstream.readObject();
    }
    catch(IOException e){
         //
    }
相关问题