如何从文件中逐个读取整数和字符?

时间:2011-07-28 16:25:45

标签: java file-io

我正在尝试处理一个输入文件,其中包含我必须用于计算的数字和我需要用于比较的字符。一个简单的例子是这样的文件:

6
foobar

和这样的代码:

n = readInInt
  while n > 0
    c = readInSingleChar
    if (c = 'f')
      doSomething
    n--

目前我在这里和通过谷歌找到了很多选项,包括DataStream和BufferedReader以及FileReader,但似乎有太多方法,我不确定它们是否也能满足我的需求。如果我的需求不明确,请告诉我。

简而言之,我需要逐个字符地读取文件,并将数字解释/使用为int,将字母和符号解释为字符。

最简单的方法是什么?我知道有专业的方法可以做事,而且“有”做事的方法。这是一次性的,爱好的个人使用的东西,我不是在寻找可靠或强大的功能。它必须工作正常。

谢谢!

2 个答案:

答案 0 :(得分:1)

我觉得最简单的方法是使用StreamTokenizer这个类为您提供解析整数或字符串所需的实用程序。

我会从像

这样的东西开始
StreamTokenizer tokenizer = new StreamTokenizer(new BufferedReader(new FileReader("foo.in")));

while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {

                if (tokenizer.ttype == StreamTokenizer.TT_WORD)
                    // use tokenizer.sval
                else if (tokenizer.ttype == StreamTokenizer.TT_NUMBER)
                   // use tokenizer.nval
            }

以下是关于如何使用它的example。以上是用于标记文件和通过char读取char的非常常见的方法。出于性能原因,您当然应该使用FileReader或Buffer。

您也可以使用Scanner。示例代码就像

Scanner s = new Scanner(file);
s.useDelimiter(""); // reads one char a time
while(s.hasNext()){
  if(s.hasNextInt(){
    // then do something with s.nextInt()
  }else{
    // then do something with s.next()
  }
}

答案 1 :(得分:1)

如果您正在寻找一个简单的解决方案,java.util.scanner将是一件好事。

它具有易于使用的方法,可以读取不同的数据类型(例如int或String)。

使用I / O流找到的解决方案有点复杂,可能对您的任务没有用处。他们工作(并且非常适合大型应用程序)。

使用自定义分隔符的示例:

Scanner s = new Scanner(new File("txtfile.txt");
s.useDelimeter(Pattern.compile("\n|"); //The newline character (\n) and null 
                                       //character are the delimeters.
while (s.hasNext()) {
    if (s.hasNextInt() {
        //Do something
    } else {
        //Handle characters
    }
}

(供参考:Pattern

这种直接方法的问题在于它不会采用多位整数。

另一种方法是使用标准分隔符。然后,当你想要读取字符时,读取整个标记(在你的例子中,你将读入“foobar”)然后在循环中单独处理每个字符。

String str = s.next();
for(char c : str.toCharArray()) {
    //handle characters
}