2010-06-15 2 views
1

약 2G의 파일로 작업하고 있습니다. 특정 용어를 찾으려면 줄 단위로 파일을 읽으 려합니다. Whitch 클래스를 사용하면 FileReader 또는 FileInputStream을 더 잘 사용할 수 있습니까? 그리고 특정 단어를 어떻게 효율적으로 찾을 수 있습니까? 난 그냥 split() 메서드를 사용하고 있지만 java.util.regex.Matcher 클래스와 함께 java.util.regex.Pattern 클래스를 사용할 수 있습니다.FileReader와 FileInputReader. split vs Pattern

따라서 질문은 다음과 같습니다. FileReader 또는 FileInputStream 클래스를 사용할 수 있습니까? 분할 메서드 또는 정규식 클래스를 사용할 수 있습니까

누군가이 질문에 대한 답변을 제공합니까? Thans.

+0

FileInputReader 란 무엇입니까? 어디서 찾았는지 – Coffee

답변

0

바이너리가 아닌 문자열 데이터로 작업하기 때문에 Reader (아마도 BufferedReader으로 감싸는)를 사용하고 싶을 것입니다. 패턴 (Pattern.compile)을 미리 컴파일해야합니다. 그 외에도 Pattern.split을 사용해야하는지 또는 매처를 사용하는 것이 더 적절한 지에 대한 설명은 분명하지 않습니다.

str.split(regex, limit)Pattern.compile(regex).split(str, limit)

+0

답장을 보내 주셔서 감사합니다 – user360518

4

에 해당하는 것으로 가장 좋은 방법은 포장 (그 readLine() 방법에 대한)를 BufferedReader를 사용하는 것 인 InputStreamReaderFileInputStream (실제로 읽기 위해 포장 (인코딩을 지정하는 능력에 대한) 파일) :

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

FileReader는 문제가 발생할 가능성을 인식하지 못합니다 개발자의 클래스를 주로 함정을 만들고, 일반적으로 나쁜 생각 플랫폼의 기본 인코딩을 사용합니다.

줄에 부분 문자열을 찾으려면 String.indexOf()이 가장 효율적입니다. 실제로 특정 패턴을 찾고 있다면 regexes를 사용하는 것이 좋습니다.

+0

+1 답장을 보내 주셔서 감사합니다 – leonbloy

+0

답변을 주셔서 감사합니다 – user360518

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