使用Java从SD卡中提取android文件



我想从android SD卡(模拟器或设备)中提取一个文件,并将其放在我的C:\驱动器上。

我如何在Java中做到这一点?在命令提示符中,我只需键入:

C: \Users\ME\android-sdks\platform-tools\adb.exe pull/sdcard/test_1329402481933.jpg c:\

所以在Java中,我认为它应该是这样的:

 Runtime rt = Runtime.getRuntime();
     Process pr = rt.exec("C:\Users\ME\android-sdks\platform-tools\adb.exe pull /sdcard/test_1329402481933.jpg c:\");
     int exitVal = pr.waitFor();
     System.out.println("Exited with error code "+exitVal);

但是,它没能给我这个线索:

java.io.IOException:运行exec()时出错。命令:[C:\Users\ME\android-sdks\platform-tools\adb.exe,pull,/sdcard/test_1329402481933.jpg,c:]工作目录:null环境:处为nulljava.lang.ProcessManager.exec(ProcessManager.java:196)java.lang.Runtime.exec(Runtime.java:225)java.lang.Runtime.exec(Runtime.java:313)java.lang.Runtime.exec(Runtime.java:246)com.blinkbox.client.test.MyTest.takeScreenShot(MyTest.java:138)com.blinkbox.client.test.MyTest.testCanOpenSettings(MyTest.java:66)位于的java.lang.reflect.Method.invokeNative(本机方法)android.test.InstructionTestCase.runMethod(InstrumentationTestCase.java:205)在android.test.InstructionTestCase.runTest(InstrumentationTestCase.java:195)在android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase 2.java:175)在android.test.AndroidTestRunner.runTest(AndroidTestRunnr.java:169)

在android.test.AndroidTestRunner.runTest(AndroidTestRunnr.java:154)在android.test.InstructionTestRunner.onStart(InstrumentationTestRunner.java:430)在android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)引起原因:java.io.IOException:在拒绝权限java.lang.ProcessManager.exc(本机方法)java.lang.ProcessManager.exec(ProcessManager.java:194)…19更多

我愿意用一种完全不同的方式。。。只需要完成任务:)

答案1:我认为存在权限被拒绝的线索

尝试写入其他目录。

答案2:尝试"cmd/c…"

String[] args = {"cmd", "/c", ""C:\Users\MEandroid-sdks\platform-tools\adb.exe pull /sdcard/test_1329402481933.jpg c:\test"",};
Runtime rt = Runtime.getRuntime();
ProcessBuilder pb = new ProcessBuilder(args);
Process pr = pb.start();  
这里有一种从安卓系统中提取文件的方法。您需要使用ddmlib来查找设备。导入com.android.ddmlib.IDevice;导入com.android.ddmlib.SyncService;void pullFile(IDevice设备,字符串文件,字符串remotePath,字符串localPath){SyncService服务=getSyncService(设备);尝试{service.pullFile(remotePath+文件,localPath+文件,SyncService.getNullProgressMonitor());}catch(SyncException | TimeoutException | IOException e){log.error("pull"+file+":"+e.getMessage());}}

从stacktrace[AndroidTestRunner]asume开始,您可以通过ide启动它。尝试以管理员身份启动您的ide,以确定是否存在此问题。

最新更新