缓冲读取器输入到char数组

时间:2018-05-13 11:24:48

标签: java bufferedreader java-io

我想从txt文件中获取输入并将所有字符放入数组中,以便我可以执行一些正则表达式函数。但是当我尝试用一​​个循环读取数组来检查它时,什么都没有出现。这有什么不对?

import java.io.BufferedReader;
import java.io.FileReader;

public class Main
{
    public static void main(String[] args)
    {
        try
        {
            Task2.doTask2();
        }catch(Exception e){};
    }
}

class Task2
{
    public static void doTask2() throws Exception
    {
        FileReader fr = new FileReader("F:\\Filip\\TextTask2.txt");
        BufferedReader br = new BufferedReader(fr);

        char[] sentence = null;
        int i;
        int j = 0;
        while((i = br.read()) != -1)
        {
            sentence[j] = (char)i;
            j++;
        }
        for(int g = 0; g < sentence.length; g++)
        {
            System.out.print(sentence[g]);
        }

        br.close();
        fr.close();
    }
}

2 个答案:

答案 0 :(得分:0)

您只需使用File.readAllBytes即可阅读文件。然后没有必要创建单独的读者。

String text = new String(
    Files.readAllBytes(Paths.get("F:\\Filip\\TextTask2.txt"))
);

在原始代码段中,文件阅读功能正在抛出NullPointerException,因为sentence已初始化为null,然后取消引用:sentence[j] = (char)i;

调用函数吞下了异常而没有打印,这就是为什么在运行程序时没有看到它:}catch(Exception e){};

而不是吞下异常,而不是将调用函数声明为抛出适当的已检查异常。这样,您在运行时会看到堆栈跟踪:public static void main(String[] args) throws IOException {

答案 1 :(得分:0)

你使用了错误的索引,使用&#34; g&#34;而不是&#34;我&#34;这里:

System.out.println(sentence[g]);

此外,最好和最简单的方法是:

package io;
import java.nio.file.*;;
public class ReadTextAsString
{
  public static String readFileAsString(String fileName)throws Exception
  {
     return new String(Files.readAllBytes(Paths.get(fileName)));
  }

  public static void main(String[] args) throws Exception
  {
    String data = readFileAsString("F:\\Filip\\TextTask2.txt");
    System.out.println(data); //or iterate through data if you want to print each character.    
  }
}