2010-06-15 19 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