我是新手,所以我知道用Java读取文件的唯一方法是:
DataInputStream dis = new DataInputStream(new FileInputStream(<FILE>));
和
BufferedReader br = new BufferedReader(new FileReader(<FILE>));
我知道虽然第一个用于处理二进制文件的目的,但后者用于字符/文本文件(对于我目前的理解:这样我可以打开它们,比如记事本,看到人类的东西实际上可以阅读)。问题是:如果问题没有说明我是要处理二进制文件还是文本文件怎么办?我的意思是:当我要从文件中读取一个对象时,例如,我知道它是第一个,但是当我只给出“你的方法是从XYZ文件中读取包含学生姓名的信息时”你要处理的(等等)“?
我遇到过一些这样的任务,并且从未确定使用哪一项。如果描述没有明确说明文件的类型,或者有一些约定,如果没有说,那么我可以使用我想要的任何东西,假设我们正在处理X更安全吗?
答案 0 :(得分:3)
您执行需要知道您要阅读的类型。
如果规格不清楚,请自行定义(并记录)。如果您已有一个现有文件,您可以查看它以决定采用哪种方法 - 如果它是面向行的,其中没有“不可读”的字符,例如在一行中有一个名称,您将采用文本文件方法。如果在文本编辑器中打开它看起来很奇怪,你可以假设一个二进制文件,但在这种情况下你需要额外的信息才能正确读取它。
在文件系统级别,没有“二进制”或“文本”文件这样的东西 - 这取决于你如何解释它。您可以将每个文件读取为二进制文件(考虑单个字节 - 这是十六进制编辑器所做的),并且您可以将(几乎)每个文件作为文本读取(并且当您尝试使用时,最有可能最终看起来像垃圾打印它)。 (我说“差不多”,因为有一些多字节字符的限制,其中一个字符是由多个字节构建的。但即使这些文件仍然可以被视为“扩展ASCII”文件,其中每个字节映射到一个字符)。
在任何情况下,您都应该记录您期望的文件格式(即使“文本”文件也可以具有不同的结构,例如固定行长度,可变行长度等)。
答案 1 :(得分:0)
“您的方法是从XYZ文件中读取,其中包含您要处理的学生名称(等等)”?
基于我突出显示的声明,我认为该文件包含基于文本的数据。
此时你应该使用“读者”的衍生物阅读它。
如果文件具有固定的结构,您可以考虑使用InputStream或其衍生物。
但是,在你的情况下,阅读学生姓名的字符数据似乎是一项简单的任务。