我有点奇怪的情况。我正在编写一个Java程序,用我的Raspberry Pi(Linux)上的Transmission自动通信。
我有以下代码(为方便/安全而简化和编辑):
String s;
String fullCommand = "transmission-remote -n username:password -a /location/to/file.torrent";
String[] cmd = fullCommand.split(" ");
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((s = br.readLine()) != null) {
System.out.println("line: " + s);
}
p.waitFor();
System.out.println("exit: " + p.exitValue());
p.destroy();
我得到的输出是"不存在或无效的torrent文件"。 如果我在命令行上运行完全相同的脚本,我会获得成功(因此该文件存在且有效)。
我读过Runtime.exec()有空格问题。因此分裂("")。 没有它也行不通。
我知道Runtime.exec()与命令行不一样,但有什么方法可以让它工作吗?
我有一个解决方法,但我想一步到位。 如果有人感兴趣:解决方法是将命令写入.sh文件,使其可执行并使用Runtime.exec()运行该命令。这确实有效。