我正在使用大约2G的文件。我想逐行阅读文件以找到一些特定的术语。 我可以更好地使用Whitch类:FileReader还是FileInputStream? 我怎样才能有效地找到具体的单词。我只是使用split()方法,但可以将java.util.regex.Pattern类与java.util.regex.Matcher类结合使用。
所以问题是: 我可以使用哪个类:FileReader或FileInputStream? 我可以使用拆分方法或正则表达式类
有人对这些问题有答案吗? Thans。
答案 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)
BufferedReader有readLine()
方法,可用于逐行阅读。 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
}