如何使用 Java 在 cmd window 上显示 .txt 文件的内容?

How to display the contents of a .txt file on cmd window using Java?

我正在做一个项目,我想在 CMD window 上显示一个 .txt 文件的内容。我写了这段代码来在 cmd 上打开一个 demo.txt 文件,但它不起作用。 “路径”变量包含放置 demo.txt 文件的位置(如您所见)。

public static void main(String[] args){
    try{
        String path = "C:\Users\Hp\Documents\NetBeansProject\Project\build\classes\";
        //cmd command to open open the txt file on cmd window
        String command = ("type " + path + "\demo.txt");
        //executing this command on cmd using java
        Process process = Runtime.getRuntime().exec(command);
        }catch(IOException e){
            e.printStackTrace();
        }

此代码产生以下输出:

不要介意这些令人讨厌或错误的代码,因为我在 Java 编程方面还是个初学者。

显示 CMD window 的可执行文件(如您在问题中所指)是:

C:\Windows\System32\conhost.exe

使用classjava.lang.ProcessBuilder启动conhost.exe

ProcessBuilder pb = new ProcessBuilder("conhost.exe");
Process proc = pb.start();

当您运行此java代码时,将显示CMD window
请注意,您不能在此 window 中键入命令,因为它的标准输入是您的 java 程序而不是键盘。但是,您可以从 java 代码向 window 发送命令。您只需写入 Process 实例的输出流。

首先得到Process

的输出流
OutputStream os = proc.getOutputStream();

然后将您想要的命令写入输出流。

我使用 [Windows] start 命令打开了一个单独的 window – 您可以与之交互 – 以及 运行 您想要的命令 window。最后,我关闭了通过 conhost.exe 打开的 window。结果,start命令打开的window保持打开状态,java程序终止。

这是完整的代码。

import java.io.IOException;
import java.io.OutputStream;

public class Script {

    public static void main(String[] args) throws IOException, InterruptedException {
        ProcessBuilder pb = new ProcessBuilder("conhost.exe");
        Process proc = pb.start(); // throws java.io.IOException
        OutputStream os = proc.getOutputStream();
        os.write("start /D C:\Users\Hp\Documents\NetBeansProject\Project\build\classes type demo.txt".getBytes()); // throws java.io.IOException
        os.write(System.lineSeparator().getBytes()); // throws java.io.IOException
        os.write("exit".getBytes()); // throws java.io.IOException
        os.write(System.lineSeparator().getBytes()); // throws java.io.IOException
        os.flush(); // throws java.io.IOException
        int status = proc.waitFor(); // throws java.lang.InterruptedException
        System.out.println("Exit status = " + status);
    }
}