2012-02-16 1 views
1

Я хочу вытащить файл с SD-карты Android (эмулятор или устройство) и поместить его на свой диск C: \.Вытаскивание файла андроида с SD-карты с использованием Java

Как это сделать на Java? в командной строке, я просто наберите:

C: \ Users \ ME \ андроида-SDKs \ платформенные инструменты \ adb.exe тянуть /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 Окружающая среда: null: java.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.InstrumentationTestCase.runMethod (InstrumentationTestCase.java:205) в android.test.InstrumentationTestCase.runTest (InstrumentationTestCase.java:195) на android.test.ActivityInstrumentationTestCase2.runTest (ActivityInstrumentationTestCase2.java:175) в android.test.AndroidTestRunner.runTest (AndroidTestRunner.java:169)

на android.test.AndroidTestRunner.runTest (AndroidTestRunner.java:154) на android.test.InstrumentationTestRunner.onStart (InstrumentationTestRunner.java:430) на android.app.Instrumentation $ InstrumentationThread.run (Instrumentation.java:1447) Вызвано: java.io.IOExcep Тион: Разрешение отказано в java.lang.ProcessManager.exec (Native Method) на java.lang.ProcessManager.exec (ProcessManager.java:194) ... более 19

Я открыт, чтобы сделать это совершенно другой способ ... Просто нужно, чтобы получить работу :)

ответ

2

ОТВЕТ 1: Я думаю, что ключ есть отказано в

Попробуйте написать в другой каталог.

ОТВЕТ 2: Попробуйте "CMD/с ..."

String[] args = {"cmd", "/c", "\"C:\\Users\\ME\android-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(); 
+0

Я попробовал еще раз, на этот раз создав новую папку c: \ test. В Windows я установил разрешение моей новой папки на «Все» и «Полный контроль». Я все еще получаю ту же ошибку. – user952342

+0

В этом случае я добавил предложение cmd/c, которое может сработать для вас. –

+0

@BicycleDude: запуск программы EXE с помощью cmd/c не имеет никакого смысла. Это необходимо только для командных файлов и команд оболочки. – Robert

0
 
Here is a way to pull a file from an Android. You will need to use ddmlib to find the device. 

import com.android.ddmlib.IDevice; 
import com.android.ddmlib.SyncService; 

    void pullFile(IDevice device, String file, String remotePath, String localPath) { 
     SyncService service = getSyncService(device); 
     try { 
      service.pullFile(
         remotePath + file 
        , localPath + file 
        , SyncService.getNullProgressMonitor()); 
     } catch (SyncException | TimeoutException | IOException e) { 
      log.error("pull " + file + ":" + e.getMessage()); 
     } 
    } 


0

Из StackTrace [AndroidTestRunner] предполагаю, вы начинаете его через язя. Попытайтесь приступить к идее администратора, чтобы узнать, является ли это проблемой.

+0

лучше поместите это как комментарий – Mostafiz

Смежные вопросы