【问题标题】:buffered reader input into char array缓冲读取器输入到 char 数组
【发布时间】:2018-05-13 11:24:47
【问题描述】:

我想从 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();
    }
}

【问题讨论】:

  • 因为您在第二个循环中使用了i 而不是g,但是如果这是真正的代码,您将得到一个您没有提到的异常。

标签: java bufferedreader java-io


【解决方案1】:

您只需使用File.readAllBytes 即可读取文件。那么就没有必要创建单独的阅读器了。

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

在原来的sn-p中,文件读取函数抛出了NullPointerException,因为sentence被初始化为null,然后被取消引用:sentence[j] = (char)i;

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

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

【讨论】:

  • 我明白了,我添加了 e.printStackTrace() 来查看信息,是的,它显示了 NullPointerException。如果我还是想使用 BufferedReader 会是什么样子?
  • 还有我需要导入什么才能使用你的方法?
  • java.nio.file.Files 和 java.nio.file.Paths。
【解决方案2】:

你使用了错误的索引,这里使用“g”而不是“i”。:

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.    
  }
}

【讨论】:

  • 哦,没问题,如果仍然遇到问题,请告诉我。我在移动设备上,无法访问任何 IDE 来干运行您的代码,这只是我一眼就注意到的第一个错误。
  • 为什么要初始化为""
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 2011-05-18
  • 1970-01-01
  • 2015-04-11
  • 2020-10-05
  • 1970-01-01
  • 2018-12-31
相关资源
最近更新 更多