我正在尝试阅读文本文件。我必须找到一个特殊的标记“STUDENT | ITEMS |”在那个文件中。然后我必须丢弃该文件中的下八行并读取第9行以获得所需的输入。现在我有些困惑。哪一个用来读取文件?扫描仪类或缓冲读卡器?哪一个在性能问题上更好?我也看到使用datastream和inputstream。所以我有点困惑。 然后用什么来查找令牌?正则表达式解析或令牌解析?我将使用split()分割一行,或者在解析这样的行时使用nextToken(): “ID |名称|值|”获取id名称和值。请帮忙。
答案 0 :(得分:1)
使用FileInputStream
包装到InputStreamReader
(用于正确的编码),包裹在BufferedReader
中(为了方便方法,例如readLine()
),然后{ {3}}可以检查String
是否包含其他String
。
答案 1 :(得分:1)
使用FileUtils.readLines(File f)
获取要迭代的文件中的行列表。然后只需使用line.contains("STUDENT | ITEMS |")
来检测您的匹配。跳过循环中的后8行。
(来自commons-io的FileUtils)
答案 2 :(得分:1)
由于您似乎对java中的数据输入缺乏经验,因此最好先解释一下
FileInputStream从文件读取数据流。当您为文件名创建一个时,它将为您打开该文件。
DataStreamReader将读取FileInputStream并处理编码,处理输入端并在读取时为您提供字符。
BufferedReader有助于提高效率和便利性。它不是逐字节读取(具有高开销),而是有助于处理块读取并将每个块存储在其缓冲区中。这对您来说是不可见的,但有助于提高性能。它还为您提供逐行阅读的功能,这将帮助您完成任务。
这就是你将文件包装在不同层次的读者中的原因。我建议你看一下如何使用ArrayLists(java.util),因为它们可以自我调整数组大小,并且可以让你轻松地逐行存储这些行(作为字符串)。未来的良好实践,易于使用。
就找到令牌而言,你已经读过你的行(逐行或存储)。您可以使用String.contains检查字符串是否包含您的令牌,或者您可以使用indexOf查找字符串中的特定位置。无论哪种方式,从那一点开始,它只是跳过正确的行数并将第9行发送到您想要的功能