我需要爲文件及其文件夾設置權限。兩者都位於內部存儲上的/ data /文件夾中。我的應用程序可以做到這一點的唯一方法是:一次不能執行多個shell命令
String[] cmd = { "su", "-c", "chmod 777 " + myakDB.getParentFile().getPath()};
Process process = Runtime.getRuntime().exec(cmd);
process.waitFor();
cmd = new String[] { "su", "-c", "chmod 666 " + myakDB.getPath() };
process = Runtime.getRuntime().exec(cmd);
process.waitFor();
因此,它要求超級用戶兩次許可。這是我爲我的應用用戶所猜想的不想要的行爲。因此,通過互聯網搜索相同的問題給了我以下解決方案(使用流):
Process process = Runtime.getRuntime().exec("su");
DataOutputStream out = new DataOutputStream(process.getOutputStream());
out.writeBytes("chmod 777 " + myakDB.getParentFile().getPath());
out.writeBytes("chmod 666 " + myakDB.getPath());
out.writeBytes("exit\n");
out.flush();
但它不起作用。有時候什麼都沒有發生,有時它會觸發超級用戶查詢,然後掛起白屏。那麼我的過程有什麼問題?
您似乎缺少換行符或分號來結束第一個和第二個命令。另外,請不要讓可執行文件是世界可寫的 - 777幾乎總是一個壞主意。 –
閱讀(並實現)*所有* [當Runtime.exec()不會](http://www.javaworld.com/jw-12-2000/jw-1229-traps.html)的建議。這可能會解決問題。如果不是,它應該提供更多關於失敗原因的信息。然後忽略它引用'exec'並使用'ProcessBuilder'構建'Process'。還要將'String arg'分解爲'String [] args'來解釋其本身包含空格的參數。 –
>>>不要讓世界上可執行的東西可執行 - 777 如果文件沒有777權限,我無法寫入文件。我認爲這種錯誤的方式? – kolyaseg