所以我正在制作一个将iso提取到位置的应用程序(主要是USB挂载点,即/ media / kp / mount_point)
pzip-full 软件包已安装在我的计算机上。因此,有关从外壳sudo 7z x -y 'filename' -o'location'
中提取iso的相关代码。 Sudo,因为我将其提取到需要root的/media/kp/mount_point
中。
因此,在Java中,我创建了一个函数,该函数使用我的sudo密码以sudo的身份运行上述7z命令,并记录并以String形式返回输出。
private String ExecuteShell(String command) {
String[] cmd = {"/bin/bash","-c","echo 'mysudopass' | sudo -S "+command};
StringBuilder joined= new StringBuilder();
Process pb = null;
try {
pb = Runtime.getRuntime().exec(cmd);
String line;
BufferedReader input = new BufferedReader(new InputStreamReader(pb.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
joined.append(line).append("\n");
}
input.close();
} catch (Exception e) {
e.printStackTrace();
}
return joined.toString();
}
现在以ExecuteShell("7z x -y '"+filename+"' -o'"+location+"'")
的身份运行;
这是问题,从终端运行时该命令运行正常,但是当我在Java中使用上述功能时,它会按要求打印7zip的输出,但我看不到它写在我的身上USB记忆棒,它最多只能运行5秒钟,而我的ISO是一个大文件,至少需要2分钟或2分钟。
我尝试将位置更改为常规路径,例如/home/kp/Desktop/folder
。在这里,它可以使用空文件夹(仅结构)快速提取文件夹,文件夹上带有锁和叉号。查看图片
我不知道为什么会这样,我在USB挂载点和iso文件上尝试了chmod + x和777。仍然没有用。有什么理由以及如何解决它?
注意:我不只是提取iso文件,还只是提取要用于测试的文件。它将用于许多文件类型。这就是为什么我不建议使用Loopy或java-iso-tools的原因。
编辑:我的代码很完美,问题出在我的thread
上。我正在同时使用两个线程在usb棒上写入,这使usb成为资源!这就是为什么会出错。很抱歉浪费时间!我的代码很完美,只有我玩过白痴游戏。