为什么我不能将所有行导出到文本文件?

why i cant export all line to text file?

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

文本文件输出应如下所示

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

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

如果您像这样更改 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();

好吧,如果一切顺利,上面的代码将起作用。我们必须确保在发生错误时 writer 被关闭,为此有 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);
    }
}