2010-06-15 39 views
1

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

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

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

+0

什么是FileInputReader?你在那里发现 – Coffee 2015-07-14 04:16:28

回答

0

由于您使用的是字符串数据,而不是二进制,因此您需要使用读取器(可能包含在BufferedReader中)。您应该预编译您的模式(Pattern.compile)。除此之外,从描述中不清楚是否应该使用Pattern.split,或者如果使用匹配器会更合适。

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

+0

感谢您的回答 – user360518 2010-06-16 11:22:05

4

最好的办法是使用一个BufferedReader(其readLine()法)包装的InputStreamReader(其指定编码能力)包装一FileInputStream(为实际读取文件):

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

FileReader使用平台的默认编码,这通常是一个坏主意,使类主要陷阱开发商谁不知道潜在的问题的。

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

+0

+1最佳实践 – leonbloy 2010-06-16 01:01:18

+0

感谢您的回答 – user360518 2010-06-16 11:21:22

0

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

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

感谢您的回答 – user360518 2010-06-16 11:22:59