我已经遵循了几个问题答案,但似乎仍然无法像在终端中那样在代码中使用 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};