从文本文件逐个字符读取

10
在Java中,是否有一种方法可以按一个字符读取文件(文本文件),而不是逐个字符串读取。这是为了实现极其基本的词法分析器而设计的,因此您可以理解我为什么需要这样的方法。谢谢。

其实,我不明白;你如何处理输入并不同于你如何读取它。在我看来,你应该使用缓冲读取器逐个字符地处理输入,而不是以显式的方式读取它。 - Dave Newton
4个回答

7
这是一个读取/写入单个字符的示例代码。
public class CopyCharacters {
    public static void main(String[] args) throws IOException {

        FileReader inputStream = null;
        FileWriter outputStream = null;

        try {
            inputStream = new FileReader("xanadu.txt");
            outputStream = new FileWriter("characteroutput.txt");

            int c;
            while ((c = inputStream.read()) != -1) {
                outputStream.write(c);
            }
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
        }
    }
}

注意,本答案已更新以复制来自Ref链接的示例代码,但我看到这基本上是下面给出的相同答案。

ref: http://download.oracle.com/javase/tutorial/essential/io/charstreams.html


你看了链接吗?它显示如何逐个字符读取文本文件。 - user974465
如果链接失效,更新答案。 - user974465

4
您可以使用InputStreamReader类的read方法,该方法从流中读取一个字符,并在到达流结尾时返回-1。
   public static void processFile(File file) throws IOException {
        try (InputStream in = new FileInputStream(file);
             Reader reader = new InputStreamReader(in)) {

             int c;
             while ((c = reader.read()) != -1) {
                processChar((char) c);  // this method will do whatever you want
             }
        }
    }

3

如果文件不太大,您可以将整个文件读入内存作为字符串,并逐个字符迭代该字符串。


1
这是一个答案,你认为它应该包含代码才能算作答案吗? - Ahmed

1

有几种可能的解决方案。通常您可以使用来自 java.io 包的任何 Reader 读取字符,例如:

// Read from file
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
// Read from sting
BufferedReader reader = new BufferedReader(new StringReader("Some text"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接