缓冲阅读器:将多行读入单个字符串

2022-09-02 19:53:41

我正在使用BufferedReader从txt文件中读取数字进行分析。我现在要讨论的是 - 使用.readline读取一行,使用.split将此字符串拆分为字符串数组

public InputFile () {
    fileIn = null;

    //stuff here

    fileIn = new FileReader((filename + ".txt"));
    buffIn = new BufferedReader(fileIn);


    return;
    //stuff here
}

public String ReadBigStringIn() {
    String line = null;

    try { line = buffIn.readLine(); }
    catch(IOException e){};

    return line;
}

public ProcessMain() {
    initComponents();
    String[] stringArray;
    String line;

    try {
        InputFile stringIn = new InputFile();
        line = stringIn.ReadBigStringIn();
        stringArray = line.split("[^0-9.+Ee-]+"); 
        // analysis etc.
    }
}

这工作正常,但是如果txt文件有多行文本怎么办?有没有办法输出一个长字符串,或者也许有另一种方法?也许使用?不知道如何实现这一点。while(buffIn.readline != null) {}

想法赞赏,谢谢。


答案 1

你是对的,这里需要一个循环。

通常的成语(仅使用普通的Java)是这样的:

public String ReadBigStringIn(BufferedReader buffIn) throws IOException {
    StringBuilder everything = new StringBuilder();
    String line;
    while( (line = buffIn.readLine()) != null) {
       everything.append(line);
    }
    return everything.toString();
}

这将删除换行符 - 如果要保留它们,请不要使用该方法,而只需读取到一个中(并将其附加到StringBuilder中)。readLine()char[]

请注意,此循环将一直运行到流结束(如果它没有结束,它将阻塞),因此,如果您需要其他条件来完成循环,请在此处实现它。


答案 2

我强烈建议在这里使用库,但从Java 8开始,你也可以使用流来做到这一点。

    try (InputStreamReader in = new InputStreamReader(System.in);
         BufferedReader buffer = new BufferedReader(in)) {
        final String fileAsText = buffer.lines().collect(Collectors.joining());
        System.out.println(fileAsText);
    } catch (Exception e) {
        e.printStackTrace();
    }

您还可以注意到,它与内部使用一样非常有效。joiningStringBuilder


推荐