读取一个char并添加到缓冲区字符串java

时间:2012-04-01 14:18:26

标签: java char fileinputstream

我有一个简单的文本字典文件,其中包含单词,用';'分隔。我的问题是读取所有单词并将它们存储在地图中而不将所有文件加载到字符串(字典文件可能非常庞大)。 这是我的代码,我试图将这些单词打印到控制台:

 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';')之间的某些符号不会显示:

  

Char是:e;   Char是:t;   字符串是et;   Char是:e;   Char是:t;   Char是:;   Char是:\ uffff;

我的问题为什么它不能正常工作以及如何在没有类型转换的情况下从fileinputstream(在我的例子中)中读取字符?

1 个答案:

答案 0 :(得分: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