为什么我不能将所有行导出到文本文件?
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);
}
}
我的代码正在创建空文本文件,尽管我尝试使用用于小数据输出的相同代码
文本文件输出应如下所示
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);
}
}