我手上有一个扩展名为.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中发生什么事情?您想创建哪种对象?字节流应该如何映射到这些对象?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将为您创建适当的对象(如果存在这样的库)。
FileInputStream fstream = new FileInputStream(new File("news.dat"));
并调用 read() 从文件中获取字节;如果是文本文件,则可以使用 BufferedReader buff = new BufferedInputReader(new FileInputStream(new File("news.dat")));
并调用 readLine() 获取每行文本。[编辑]或者它可能是Java对象,这种情况下就像BalusC所说的那样。[/编辑]Please try the below code:
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);
}
FileInputStream fis = new FileInputStream("news.dat");
try(ObjectInputStream objectstream = new ObjectInputStream(fis)){
objectstream.readObject();
}
catch(IOException e){
//
}
finally { in.close() }
,那么在这个级别的问题中可能会被忽略,因此提到它是值得赞赏的。 - Andrzej Doyle