4

我是新手,所以我知道用 Java 读取文件的唯一方法是:

DataInputStream dis = new DataInputStream(new FileInputStream(<FILE>));

和:

BufferedReader br = new BufferedReader(new FileReader(<FILE>));

而且我知道,虽然第一个用于处理二进制文件,但后者用于字符/文本文件(据我目前的理解:这样我就可以用记事本打开它们并查看人类实际可以阅读的内容)。问题是:如果问题没有说明我是要处理二进制文件还是文本文件怎么办?我的意思是:例如,当我要从文件中读取对象时,我知道这是第一个,但是当我只得到诸如“您的方法是从包含学生姓名的文件 XYZ 中读取”之类的信息时,该怎么办?你要处理哪个(等等等等)”?

我遇到过一些这样的任务,但一直不确定该使用哪一个。如果描述没有明确说明文件的类型,我可以使用我想要的任何内容,或者是否有一些约定,如果什么都没说,假设我们正在处理 X 会更安全?

4

2 回答 2

3

确实需要知道要阅读的类型。

如果规范不清楚,请自行定义(并记录)它。如果您已经有一个现有文件,您可以查看它以决定采用哪种方法 - 如果它是面向行的,其中没有“不可读”字符,例如一行一个名称,您将采用文本文件方法。如果在文本编辑器中打开它看起来很奇怪,您可以假设是一个二进制文件,但在这种情况下,您需要额外的信息才能正确读取它。

在文件系统级别上,没有像“二进制”或“文本”文件这样的东西——这取决于你如何解释它。您可以将每个文件作为二进制文件读取(考虑单个字节 - 这是十六进制编辑器所做的),并且您可以(几乎)将每个文件作为文本读取(并且当您尝试时很可能最终得到看起来像垃圾的东西打印出来)。(我说“几乎”是因为多字节字符存在一些限制,其中一个字符是由一个以上的字节构建的。但即使这些文件仍然可以被视为“扩展 ASCII”文件,其中每个字节都映射到一个字符)。

在任何情况下,您都应该记录您期望的文件格式(即使是“文本”文件也可以有不同的结构,如固定行长、可变行长等)。

于 2013-01-24T11:14:25.707 回答
0

“您的方法是从文件 XYZ 中读取,其中包含您要处理的学生的姓名(等等)”?

根据我强调的那句话,我的印象是该文件包含基于文本的数据。

此时,您应该使用“Reader”的派生词来阅读它。

如果文件具有固定结构,您可以考虑使用 InputStream 或它的派生类。

不过,在您的情况下,读取学生姓名的字符数据似乎是一项简单的任务。

于 2013-01-24T11:18:05.713 回答