1

我正在处理一个大约 2G 的文件。我想逐行阅读文件以找到一些特定的术语。我可以更好地使用哪个类:FileReader 或 FileInputStream?以及如何有效地找到特定的单词。我只是使用 split() 方法,但我可以将 java.util.regex.Pattern 类与 java.util.regex.Matcher 类结合使用。

所以问题是:我可以使用哪个类:FileReader 还是 FileInputStream?我可以使用拆分方法或正则表达式类吗

有人有这个问题的答案吗?比。

4

3 回答 3

4

最好的选择是使用一个BufferedReader(对于它的readLine()方法)包装一个InputStreamReader(因为它能够指定编码)包装一个FileInputStream(为了实际读取文件):

BufferedReader br = new BufferedReader(new InputStreamReader(
    new FileInputStream(name), encoding));

FileReader使用平台默认编码,这通常是一个坏主意,这使得类主要是对不了解潜在问题的开发人员的陷阱。

如果您只想在行中查找子字符串,String.indexOf()是最有效的方法;如果您实际上正在寻找特定模式,则使用正则表达式会更好。

于 2010-06-15T22:59:06.770 回答
0

BufferedReader有一个readLine()方法可以用于逐行读取。( Readerand Writer) 类可用于字符串数据,其中InputStream(and OutputStream) 应用于二进制数据(字节数组)。

BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while((line = reader.readLine()) != null) {
    // Do something with the line
}
于 2010-06-15T22:59:33.100 回答
0

您需要使用 Reader(可能包装在BufferedReader中),因为您使用的是字符串数据,而不是二进制数据。您应该预编译您的模式 ( Pattern.compile)。除此之外,从您的描述中不清楚您是否应该使用Pattern.split,或者使用 Matcher 是否更合适。

请注意,这str.split(regex, limit)相当于Pattern.compile(regex).split(str, limit)

于 2010-06-15T22:53:56.360 回答