我正在尝试使用adb over network将手机中的文件复制到我的电脑上。 即使对于路径中包含空格的文件,我的代码也能正常工作,但对于包含任何特殊字符的文件(例如“ßáö”)而言,它会失败,这就是我的问题。
我需要从java执行此命令,我目前正在使用此代码来提取文件:
public static void pullFile() {
try {
// Setting file paths
String androidFilePath = "\"/storage/sdcard0/Download/Bußgeld 2014 TGC.pdf\"";
String windowsFilePath = "\"C:\\Dropbox\\Java Projekte\\ADB Browser\\bin\\files\\Bußgeld 2014 TGC.pdf\"";
System.out.println(androidFilePath);
System.out.println(windowsFilePath);
// Building command
List<String> cmd = new LinkedList<>();
cmd.add("adb");
cmd.add("pull");
cmd.add(androidFilePath);
cmd.add(windowsFilePath);
// Running command
ProcessBuilder builder = new ProcessBuilder(cmd);
builder.redirectErrorStream(true);
Process p = builder.start();
// Getting the output from the command ...
System.out.println(stringBuilder.toString);
} catch (IOException e) {
e.printStackTrace();
}
}
当我运行此代码时,我收到以下错误: 远程对象'/ storage / sdcard0 /下载/Bu geld2014TGC.pdf'不存在
我现在的问题是如何正确转义adb的字符。
我曾尝试使用
ByteBuffer buf = Charset.forName("UTF-8").encode(androidFilePath);
androidFilePath = new String(buf.array(), "UTF-8");
但这样我得到一些尾随空格,我无法删除,因为trim将返回一个新的String,它不是用“UTF-8”编码的;
好的,我想通了,这可能不是java代码的错!我从cmd以及windows powershell运行命令并返回:
远程对象'/ storage / sdcard0 /下载/Bu▀geld2014TGC.pdf'不存在
答案 0 :(得分:2)
我设法通过使用以下代码段对路径进行编码来解决问题(这显然是adb Issue 8185: adb push doesn't accept unicode filenames中的错误)。
byte ptext[] = androidFilePath.getBytes("UTF-8");
androidFilePath = new String(ptext, "CP1252");