2012-04-01 8 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 ';')の間のシンボルの一部が表示されない:チャーは

である:E。 Charは:t; 文字列はet; Char:e; Charは:t; Charは:;
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; 

また、それは、一度にファイル1文字を読み取ることが一般的に良い考えではありません - あなたは試してみて、使用char []をバッファとして及びread(char[] cbuf, int off, int len)方法を使用する必要があります、またはのためにシンプルさはBufferedReaderです。

関連する問題