【问题标题】:ProcessBuilder prints an empty output after do while loopProcessBuilder 在 do while 循环后打印一个空输出
【发布时间】:2017-11-13 03:25:56
【问题描述】:

我正在使用ProcessBuilder记事本窗口 中打开一个文本文件,并根据我的代码打开另一个包含已处理文本的记事本窗口。

现在发生的是程序打开第一个记事本窗口 带有我输入的文字,但第二个窗口是空的。

是否有人建议我需要在哪里进行更改才能在第二个记事本窗口中打印已处理的文本? (我在代码下方包含了输出)。我在控制台中打印了正确的结果,但在记事本窗口中没有。我以前从未使用过 ProcessBuilder,只能找到如何使用它的简单示例。感谢您的建议。

Scanner in = new Scanner(System.in);
    System.out.print("Enter the input file: ");
    String inputFileName = in.next();
    System.out.print("Enter the output file: ");
    String outputFileName = in.next();

    String poemFilename = "poem.txt";
    String poemoutFilenamo = "newpoem";
    int lineNum = 1;

    File poemFile = new File(poemFilename);
    Scanner fileIn = new Scanner(poemFile);
    PrintWriter fileout = new PrintWriter(poemoutFilenamo);

    System.out.printf("Read in %s.\nWrote out %s.\n",inputFileName, outputFileName );

    ProcessBuilder Poemin = new ProcessBuilder("Notepad.exe", poemFilename);
    Poemin.start();

    if (fileIn.hasNextLine()) { 
        do {
            String line = fileIn.nextLine();
            System.out.printf("/*" + lineNum + "*/ %s\n", line);
            lineNum++;
        } while (fileIn.hasNextLine());;

        ProcessBuilder Poemout = new ProcessBuilder("Notepad.exe", poemoutFilenamo);
        Poemout.start();
    } 

    in.close();
    fileIn.close();
    fileout.close();

应该在记事本窗口中打印出来:

/*1*/ Somewhere over the rainbow
/*2*/ Way up high
/*3*/ And the dreams that you dreamed of
/*4*/ Once in a lullaby

【问题讨论】:

  • fileout.close() 移动到 before 开始第二个流程构建器的流程。您需要在尝试使用之前刷新到文件,并且它也需要是可编辑的(未使用)。
  • @HovercraftFullOfEels 感谢您的建议。我刚试了一下,它仍然会弹出空窗口:(

标签: java output processbuilder


【解决方案1】:

你永远不会给fileout写任何东西。您创建了文件,但它是空的。

我相信你想要

fileout.printf("/*" + lineNum + "*/ %s\n", line);

您还需要在启动第二个进程之前关闭fileout

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多