2012-04-01 1 views
0

단어가 포함 된 간단한 텍스트 사전 파일을 ';'로 구분했습니다. 제 문제는 모든 단어를 읽고 문자열에 모든 파일을로드하지 않고지도에 저장하는 것입니다. (사전 파일은 매우 클 수 있습니다). 여기에 내가 콘솔에이 단어를 인쇄하려고 내 코드입니다 :char 읽기 및 버퍼 문자열 추가 java

을 :

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Map; 

public class Dictionary { 
private static Dictionary instance; 
private Map DictionaryMap; 
private String delimiter; 

private Dictionary() { 

} 

private Dictionary(String dictfile, String delimiter) throws FileNotFoundException, IOException 
{ 
    FileReader fr = new FileReader(dictfile); 
    int position = 0; 
    StringBuffer buffer = new StringBuffer(); 
    while ((position = fr.read()) != -1) { 
     char symbol = (char) fr.read(); 
     if(symbol != ';') { 
      buffer.append(symbol); 
      System.out.println("Char is : "+symbol+" ;"); 
     } else { 
      System.out.println("String is "+buffer+" ;"); 
      buffer.delete(0, buffer.length()-1); 
     } 
    } 
} 

public void loadFromFile(File dictfile, String delimiter) { 

} 

public String getDelimiter() { 
    return delimiter; 
} 

public void setDelimiter(String delimiter) { 
    this.delimiter = delimiter; 
} 

그러나 내가이 포함 샘플 dict.txt 파일에이 코드를 실행하려고 할 때 test1; test2;

구분 기호 사이의 문자 (문자 ';')의 일부를 않습니다하지 표시 :

샤아가 : 전자; Char : t; 문자열은 et입니다. Char : e; Char : t; 문자입니다 :;
Char : \ uffff;

내 질문 왜 제대로 작동하지 않고 형식 캐스팅없이 fileinputstream (내 경우에는)에서 문자를 읽는 방법?

+1

일반 의견. 파일이 크면 대신 BufferedReader를 사용하여 속도를 향상시킬 수 있습니다. 그러면 청크로 된 파일을 내부 버퍼로 읽습니다. 파일을 다룰 때 얻을 수있는 모든 속도가 필요합니다. 파일에서 읽는 또 다른 방법은 StreamTokenizer로 구분 기호 (",")를 지정할 수 있으며 토큰을 제공합니다. – Optimist

답변

1

예를 들어 fr.read() 번을 두 번 호출합니다.

while ((position = fr.read()) != -1) { 
    char symbol = (char) fr.read(); 

따라서 입력을 건너 뜁니다.

이 있어야한다 : 그것은 일반적으로 좋은 생각이 한 번에 파일 한 문자를 읽을 수없는 것 또한

while ((position = fr.read()) != -1) { 
    char symbol = (char) position; 

이 - 당신이 시도하고 버퍼로 char []을 사용하고 read(char[] cbuf, int off, int len) 방법을 사용하거나 위해해야 단순함을 위해서는 BufferedReader을 사용하십시오.