执行非本机 MacOS 终端命令 - 截断以创建新文件 - 在 Java 代码中



我已经遵循了几个问题答案,但似乎仍然无法像在终端中那样在代码中使用 truncate 方法创建文件。

我从实际运行的代码中没有收到任何错误,这很奇怪。

我想要实现的目标:

鉴于我已经 CD 到桌面:

truncate -s 10M ./files/myFile.txt

像这样使用截断应该在文件目录中创建一个名为"myFile.txt"的新文件,文件大小为 10mb。

我的代码

我假设终端命令将从源代码运行,所以我必须包含目录的完整路径

    String homeDir = System.getProperty("user.home");
    String fileDir = "/Desktop/files/";
    String fileName = "myFile.txt";
    String fullPath = homeDir + fileDir + fileName;
    try {
      String[] cmd = {"sh", "-c", "truncate", "-s",  "10M",  fullPath};
      Process process = Runtime.getRuntime().exec(cmd);
    } catch (IOException ioe) {
      fail("something went wrong: " + ioe);
    }

正如我上面提到的,运行代码时没有错误。但是,该文件根本没有显示在我的系统中。

解决方案来自与用户@l'L'l的来回。

由于truncate是非本机 MacOS 终端命令,因此需要包含安装位置的完整路径。

which terminal

给了我

/

usr/local/bin/truncate

然后,我可以在原始代码中添加它来代替truncate

此外,由于截断不是使用任何其他关键字或速记执行的,因此我不需要包含sh-c

最后的process代码是:

String fullPath = "/Users/username/Desktop/files/myFile.txt
String[] cmd = {"/usr/local/bin/truncate", "-s",  "10M",  fullPath};
Process process = Runtime.getRuntime().exec(cmd);

所有字符串片段也可以提取到它们自己的变量中:

String truncate = "/usr/local/bin/truncate";
String fileSize = "10M"

为了便于阅读:

String[] cmd = {truncate, "-s",  fileSize,  fullPath};

相关内容

最新更新