Проверьте, существует ли файл, используя bash внутри Java программы? - PullRequest
0 голосов
/ 09 января 2020

Итак, я наблюдаю за java программой для взаимодействия с файловой системой. Java Сама программа не может запускаться от имени суперпользователя. Я создал специального пользователя для этой программы и дал ему некоторые особые привилегии для запуска некоторых команд без пароля (через файл visudo).

Так что я хотел бы проверить, существует ли файл. Я использовал:
if(f.exists() && !f.isDirectory()), но проблема в том, что это не получается, если я проверяю, существуют ли файлы, защищенные от чтения / записи, или они принадлежат другому пользователю.
Именно поэтому мне нужно использовать bash. например, когда я получаю информацию о файле, я использую следующее:
String[] command = new String[] { "sudo", "stat", filepath, "-c", "%F@@%s@@%U@@%G@@%X@@%Y@@%Z" };
process = runtime.exec(command);, а затем просто анализирую вывод.

Например, для перемещения файла я использую это:

String[] command = new String[] {
            "sudo",
            "-u",
            user,
            "mv",
            source,
            target
};

Так что теперь я ищу способ получить простой ответ истина / ложь при проверке, существует ли файл.

Я думаю, я мог бы использовать команду find или что-то подобное?

1 Ответ

0 голосов
/ 16 января 2020

Я решил свою проблему с помощью следующей команды:
String[] command = new String[] { "sudo", "-u", user, "test", "-f", path };

Где пользователь - это пользователь, от имени которого я запускаю команду. И путь - это путь к файлу, который мы тестируем.

Затем я читаю вывод команды execute и read в приведенном ниже коде. Я надеюсь, что когда-нибудь это кому-нибудь поможет ...

process = runtime.exec(command);

            errbr = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            while ((messageLine = errbr.readLine()) != null) {
                message += messageLine + ";";
            }

            br = new BufferedReader(new InputStreamReader(process.getInputStream()));
            while ((messageLine = br.readLine()) != null) {
                message += messageLine;
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...