Как изменить режим разрешения изображения на 777 с помощью кода Java? - PullRequest
8 голосов
/ 12 июня 2009

Я хочу присвоить файлу изображения значение режима разрешений "777", используя код Java. Как я могу дать это с помощью Java? Потому что я не могу удалить изображение с разрешением по умолчанию в режиме "664".

Ответы [ 5 ]

8 голосов
/ 12 июня 2009

Вы можете использовать метод 'exec' для запуска внешней команды для выполнения chmod.

Runtime.getRuntime().exec( "chmod 777 myfile" );
8 голосов
/ 12 июня 2009

Вы можете создать объект Файл , связанный с файлом, затем изменить разрешения, используя setExecutable , setReadable и setWritable . Естественно, эти операции не будут выполнены, если у вашей программы нет прав на изменение прав доступа к файлу.

3 голосов
/ 12 июня 2009

Это часть пакета NIO. Вы можете сделать это через java.nio.file.attribute.PosixFilePermission .

Это только в Java 1.7 , однако, это было известной проблемой в течение некоторого времени.

1 голос
/ 21 декабря 2010

Вот код: -

List<String> chPermList = new LinkedList<String>();
chPermList.add("/bin/chmod");
chPermList.add("777");
chPermList.add(Path_to_image_file);


    public void changePermission(List chPermList)
    {
        ProcessBuilder pb = null;
        pb = new ProcessBuilder(chPermList);
                pb.redirectErrorStream(true);

                Process p = pb.start();

                BufferedReader br = new BufferedReader(new InputStreamReader(p
                        .getInputStream()));

                p.waitFor();

                if(p.exitValue()!=0)
                {
                    strExpMsg = "The permission change failed with exit value" + p.exitValue();

                }
    }
1 голос
/ 12 июня 2009

К сожалению, Java мало что дает для свойств системных файлов, потому что это нарушило бы золотое правило java «пиши один раз, беги везде».

Действительно, когда вы пишете, что хотите предоставить 777 доступ к файлу, это, очевидно, означает, что вы работаете под Unix. Но что бы означал такой запрос под Windows, например?

Так что неудивительно, что для решения конкретных тем ОС вам придется использовать определенные функции. Это цена, которую нужно платить при использовании языка, который заявляет (по веским причинам), что он «независим от платформы»

Более безопасный способ - использовать библиотеку JNI, которая реализует именно то, что вы хотите. Простой, но грязный и опасный способ - использовать Runtime.getRuntime (). Exec ("chmod 777 myFile").

Почему опасно? На самом деле, что происходит, когда кто-то называет такого exec ("бла-бла")?

Unix-процесс, запускающий форки вашей java-программы; затем «дублированный» процесс исполняет оболочку (ksh? csh? bash? это зависит от вашей конфигурации unix), которая пытается понять и выполнить ваше предложение «бла-бла».

Если ваш jvm на самом деле использует 500 МБ, разветвленный процесс при запуске будет иметь такой же размер ...

Тогда оболочка будет запускаться с тем же «контекстом оболочки», что и процесс java, то есть с тем же PATH, псевдонимами и так далее. Даже "chmod" мог быть псевдонимом, поэтому было бы лучше назвать полный путь для chmod (/ bin / chmod, / usr / bin / chmod ... это зависит от разновидности unix ...).

Во время выполнения оболочки ваша java-программа зависает, и у вас нет возможности ее разморозить, если по какой-либо причине оболочка зависла.

И, наконец, он даже не уверен, что владелец unix java-программы обладает достаточными правами для изменения такой информации в файле (ему может быть разрешено создавать файл, но не изменять, например, права на уровне пользователя).

Может быть, вы пытаетесь решить на уровне Java проблему, которую следует решать на уровне ОС?

...