【问题标题】:How to display the contents of a .txt file on cmd window using Java?如何使用 Java 在 cmd 窗口上显示 .txt 文件的内容?
【发布时间】:2020-11-24 09:52:21
【问题描述】:

我正在处理一个项目,我想在 CMD 窗口上显示 .txt 文件的内容。我写了这段代码在 cmd 上打开一个 demo.txt 文件,但它不起作用。 "path" 变量包含 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 编程的初学者。

【问题讨论】:

  • 你应该使用ProcessBuilder类而不是Runtime。此外,type 不是命令。我想你要找的是cmd.exe,但是为什么不直接在你的java代码中读取文件内容并调用System.out.print()在屏幕上显示文件内容呢?
  • type 是对cmd 的内部命令,所以需要发起cmd 才能访问type
  • Don’t post pictures of text. 编辑您的问题并将堆栈跟踪作为文本复制到您的问题中。

标签: java cmd file-handling java-io


【解决方案1】:

显示 CMD 窗口 的可执行文件(正如您在问题中所指的那样)是:

C:\Windows\System32\conhost.exe

使用类java.lang.ProcessBuilder 启动conhost.exe

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

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

首先获取Process的输出流

OutputStream os = proc.getOutputStream();

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

我使用 [Windows] start 命令打开了一个单独的窗口 - 您可以与之交互 - 并在该窗口中运行您想要的命令。最后,我关闭了通过conhost.exe 打开的窗口。结果,start 命令打开的窗口保持打开状态,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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2013-06-17
    • 2013-10-23
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多