Выполнить не родную команду терминала MacOS - усечь, чтобы создать новый файл - В коде Java - PullRequest
1 голос
/ 13 июня 2019

Я следовал за несколькими ответами на вопросы, но все еще не могу получить файл, созданный с использованием метода усечения в коде, как я мог бы это сделать в терминале.

Я не получаю ошибок от кода, который фактически выполняется, что странно.

Чего я пытаюсь достичь:

Учитывая, что у меня есть CD'd на рабочий стол:

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

При использовании подобного усечения следует создать новый файл в каталоге файлов с именем «myFile.txt» с размером файла 10 МБ.

Мой код

Я предполагаю, что команда терминала будет запускаться из источника, поэтому мне придется указать полный путь к каталогу

    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);
    }

Как я упоминал выше, при запуске кода ошибок нет. Однако файл не отображается в моей системе вообще.

1 Ответ

0 голосов
/ 13 июня 2019

Решение пришло туда-сюда с пользователем @ 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};
...