FileReader与FileInputReader。分裂与模式

时间:2010-06-15 22:49:05

标签: java split filereader fileinputstream

我正在使用大约2G的文件。我想逐行阅读文件以找到一些特定的术语。 我可以更好地使用Whitch类:FileReader还是FileInputStream? 我怎样才能有效地找到具体的单词。我只是使用split()方法,但可以将java.util.regex.Pattern类与java.util.regex.Matcher类结合使用。

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

有人对这些问题有答案吗? Thans。

3 个答案:

答案 0 :(得分:4)

最好的选择是使用BufferedReader(用于其readLine()方法)包装InputStreamReader(用于指定编码的能力)包裹FileInputStream(实际读取文件):

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

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

如果您只是想在行中找到子串,String.indexOf()是最有效的方式;如果你真的在寻找特定的模式,那么使用正则表达式会更好。

答案 1 :(得分:0)

你会想要使用一个Reader(可能包含在BufferedReader中),因为你使用的是String数据,而不是二进制数据。您应该预编译您的模式(Pattern.compile)。除此之外,从您的描述中不清楚您是否应该使用Pattern.split,或者使用匹配器更合适。

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

答案 2 :(得分:0)

BufferedReaderreadLine()方法,可用于逐行阅读。 Reader(和Writer)类可用于String数据,其中InputStream(和OutputStream)应用于二进制数据(字节数组)。

BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while((line = reader.readLine()) != null) {
    // Do something with the line
}