【问题标题】:why i cant export all line to text file?为什么我不能将所有行导出到文本文件?
【发布时间】:2015-12-20 01:23:06
【问题描述】:

我的代码正在创建空文本文件,尽管我尝试使用用于小数据输出的相同代码

文本文件输出应该是这样的

ClassMetrics 3 1 0 3 18 0 0 3 2 0.0000 66 1.0000 0 0.0000 0.5556 0 0 20.6667

~void():1

~ public gr.spinellis.ckjm.ClassMetrics getMetrics(String arg0): 2

~ public void printMetrics(gr.spinellis.ckjm.CkjmOutputHandler arg0): 3

但我得到一个空文本文件

这是源代码

package javaapplication11;

import java.io.*;

public class CmdTest {
    public static void main(String[] args) throws Exception {
        ProcessBuilder builder = new ProcessBuilder("cmd.exe","/c",
                "java -jar C:\\Users\\hp\\Desktop\\ckjm-1.99.jar  C:\\Users\\hp\\Desktop\\*.class");

        builder.redirectErrorStream(true);
        Process p = builder.start();
        BufferedReader r = new BufferedReader(new InputStreamReader(
                p.getInputStream()));
        String line;
        while (true) {
            line = r.readLine();
            if (line == null) {
                break;
            }
            PrintWriter writer = new PrintWriter("C:\\Users\\hp\\Desktop\\result3.txt", "UTF-8");
            // writer.println("\t\t\tWMC DIT NOC CBO RFC LCOM Ce NPM");
            System.out.println(line);
            writer.write(line);
            writer.close();
        }
    }
}

【问题讨论】:

  • 不要关闭/打开循环内的编写器,您最终会覆盖之前迭代中的所有内容。此外,您可能不会从您的进程中获得任何输入,因为您正在与执行进程相同的线程中读取流,这意味着当您到达它时流将是空的。在单独的线程中调用阅读器。

标签: java file-io bufferedreader


【解决方案1】:

问题是您在循环中反复打开和关闭编写器。 每次创建编写器时,它都会覆盖输出文件的先前内容,因此文件一次只包含一行。如果输入文件的最后一行恰好为空,则生成的输出文件也将为空。

如果您像这样更改您的 while 循环,它将正常运行:

PrintWriter writer = new PrintWriter("C:\\Users\\hp\\Desktop\\result3.txt", "UTF-8");
while (true) {
        line = r.readLine();
        if (line == null) {
            break;
        }
        System.out.println(line);
        writer.write(line);
}
writer.close();

好吧,如果一切顺利,上面的代码就可以工作。如果发生错误,我们必须确保编写器关闭,对此有 try-with-resources 语句。真正正确的代码如下所示。

try (PrintWriter writer = new PrintWriter("C:\\Users\\hp\\Desktop\\result3.txt", "UTF-8"))
    String line;
    while ( (line = r.readLine()) != null) {
        System.out.println(line);
        writer.write(line);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2018-10-29
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多