gpt4 book ai didi

java - 如何使用 java 在 linux 中打印根目录中的文件和文件夹列表

转载 作者:可可西里 更新时间:2023-11-01 11:51:12 28 4
gpt4 key购买 nike

我是 Java 和 Linux 的新手,我尝试使用一些 Runtime.exec() 命令来让我的程序在 Linux 中执行命令,例如 "cd/mnt/""ls --group-directories-first" 列出/mnt/中包含的文件和目录,但我认为我在执行时遇到了问题。

我尝试在我的代码中只包含 "ls --group-directories-first",它的效果非常好,唯一的问题是,它只列出了项目文件夹中的子目录和文件。我想让我的程序先转到/mnt/,所以我通过使用 exec(String[] cmdarray) 格式将我的命令行设为命令数组 process1 = Runtime.getRuntime() .exec(new String[]{"cd/mnt/","ls --group-directories-first"}); 当我在 linux 上运行它时,它只是在没有任何运行时错误的情况下执行,但是也没有任何反馈/打印线。

这是我的代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class linCom {
public static void main(String args[]) {
String s;
Process p;

try {
p = Runtime.getRuntime().exec("ls --group-directories-first");
BufferedReader br = new BufferedReader(
new InputStreamReader(p.getInputStream()));
while ((s = br.readLine()) != null)
System.out.println("line: " + s);
p.waitFor();
System.out.println ("exit: " + p.exitValue());
p.destroy();
} catch (Exception e) {}


}
}

这有效并打印出来:

“行:DummyFolder1

行:linCom.class

行:linCom.java

导出:0"

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class linCom {
public static void main(String args[]) {
String s;
Process p;

try {
p = Runtime.getRuntime().exec(new String[]{"cd /mnt/","ls --group-directories-first"});
BufferedReader br = new BufferedReader(
new InputStreamReader(p.getInputStream()));
while ((s = br.readLine()) != null)
System.out.println("line: " + s);
p.waitFor();
System.out.println ("exit: " + p.exitValue());
p.destroy();
} catch (Exception e) {}


}
}

这只是在没有打印行的情况下执行的。

我希望我的程序只是转到/mnt/目录并打印出那里的子目录和文件,但它只是执行而没有可见的运行时错误,也没有打印行。

我查看了其他条目,但找不到我的问题的任何答案。

编辑:我将“无错误”更改为“无错误消息”,以明确表示如果程序有任何错误,我不会收到任何反馈。

最佳答案

这就是 UNIX 进程模型可能令人困惑的地方。

您尝试使用 ls --group-directories-first 的第一个参数运行名为 cd/mnt/ 的程序。 Unix 程序可以任意命名(它们只是文件名),但没有名为 cd/mnt 的程序。而且无论如何,cd 操作实际上是由 shell 执行的,而不是作为 fork /执行程序执行的。

您希望从您的 Java 程序运行这个 shell 命令:cd/mnt/; ls --group-directories-first 。问题是,Java's .exec() method不给你一个 shell,所以 shell 命令不起作用。

你可以试试这个。就像运行shell命令一样

/bin/sh -c "cd /mnt/; ls --group-directories-first"

有了这个,你启动一个 shell,然后告诉它运行 -c你想要的命令。

Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh",
"-c",
"cd /mnt/; ls --group-directories-first"});

但它非常依赖于运行 Java 程序的机器,所以要小心。

引用:How to invoke a Linux shell command from Java

关于java - 如何使用 java 在 linux 中打印根目录中的文件和文件夹列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57956190/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com