파일 복사가 안 돼요 ㅜㅜ

조회수 529회
try { 
      Runtime runByRoot = Runtime.getRuntime().exec("su -c \"cp -r /data/data/com.kakao.talk/databases /storage/emulated/0/database\"");
      //BufferedReader reader = new BufferedReader(new InputStreamReader(getRoot3.getInputStream()));
      runByRoot.waitFor();

      File getFilePath = new File("/storage/emulated/0/database");
      File[] filesList = getFilePath.listFiles();
      for(i : filesList) {
        replier.reply(filesList[i]);
      }; replier.reply("실행 완료");

    } catch(err) {
      replier.reply(err); 
    };
    //replier.reply 메소드는 인자값 출력해주는 메소드에요. 무시하셔도 돼요!

디렉토리를 복사하고 싶어서 짠 소스인데 오류도 안나고 틀린곳도 없는거 같은데 결론적으로 파일이 복사되어있지 않네요 ㅜㅜ. 혹시 제가 잘못 입력했을까봐 명령어 부분 그대로 복붙해서 터미널에서 실행해봤는데 터미널에서는 잘 되네요....

  • 폴더 쓰기 권한이 없는거 아닐지요? (참고로 '안되요'는 맞춤법에 틀린 거라서 고쳐드렸습니다.) 엽토군 2020.6.27 20:41
  • 루팅도 했고 터미널에서는 잘만 되더라구요 ㅜㅜ 알 수 없는 사용자 2020.6.28 12:55

1 답변

  • String test_cmd[] = new String[] {"test.sh", "1", "test"};
    
    ProcessBuilder test_pb = new ProcessBuilder(test_cmd);
    Process test_p = test_pb.start();
    int signal = test_p.waitFor();
    
    

    자바로 터미널 명령을 수행할 때 한 문자열이 아니라 위처럼 문자열 배열로 분리해서 수행해보세요. 띄어쓰기 기준으로 분리하면 됩니다.

    예전에 작업할 때 찾아봤었는데 한 문자열로 사용하면 제대로 수행되지 않는다는 얘기를 봤습니다. 실제로도 수행이 안 돼서 저도 문자열 배열로 사용했고요.

    그래도 안 되면 waitFor() 호출 이후에 ProcessgetInputStream() 이나 getErrorStream()을 사용해 출력을 확인해보세요.

    커맨드에 있는 |를 인식하지 못 하는 문제도 있었고, 막 생각한대로 동작하진 않더라고요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)