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

如何在java程序中打开.dat文件,java,file-io,Java,File Io,我收到了一个扩展名为.dat的文件中的一些数据。我需要在java程序中读取这些数据,并将数据构建到我们定义的一些对象中。我尝试了以下方法,但无效 FileInputStream fstream = new FileInputStream("news.dat"); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 有人能告诉我如何在java中执行此操作吗?它是什么类型的文件?它是包含序列化Java对象的

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

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

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

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

FileInputStream fis = new FileInputStream("news.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
Object object = ois.readObject();
// ...
(不要忘记在
finally
中使用
close()
正确处理资源,但这超出了本问题的范围)

另见:

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

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

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


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

这完全取决于.dat文件的类型。不幸的是,.dat通常用作数据文件的通用扩展名。它可以是二进制的,在这种情况下,您可以使用
FileInputStream fstream=newfileinputstream(新文件(“news.dat”)
并调用read()从文件或文本中获取字节,在这种情况下,您可以使用
BufferedReader buff=new BufferedInputReader(new FileInputStream(new file(“news.dat”))
并调用readLine()获取每行文本。[edit]或者它可以是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){
         //
    }

+感谢您最后提到
{in.close()}
,因为这一级别的问题很可能会忽略它。我认为这更适合作为评论,因为它改进了现有答案,而不是添加新的解决方案。是的,伙计。。甚至我也想过这样做,但由于我还不能发表评论,所以我不得不这样做。干杯
    FileInputStream fis = new FileInputStream("news.dat");
    try(ObjectInputStream objectstream = new ObjectInputStream(fis)){

          objectstream.readObject();
    }
    catch(IOException e){
         //
    }