2012-12-07 2 views
1

나는 어떻게 그것을 할 것을 시도하고이 명령 여기안드로이드 getRuntime() 간부 인() 고양이 명령을

/sdcard/file1.mpg /sdcar/file2.mpg > /sdcard/out.mpg 

을 실행하는 프로세스 클래스이다 사용하고 있습니다 :

Process processx = Runtime.getRuntime().exec(new String[] {"cat","/sdcard/file1.mpg /sdcard/file2.mpg > /sdcard/out.mpg" }); 

BufferedReader in = new BufferedReader(new InputStreamReader(processx.getInputStream())); 

String line = null; 
while ((line = in.readLine()) != null) { 
     System.out.println(line); 
} 

// Waits for the command to finish. 
processx.waitFor(); 

명령 터미널에서 작동하지만 위를 시도 할 때, 왜 아무도 볼 수 있습니까?

답변

3

리디렉션 (>)은 OS 기능이 아닙니다. 이것은 쉘의 기능입니다.

/bin/sh yourcommand > yourfile

즉, 귀하의 경우 :이 자바에서 작업하려면 다음과 같이 실행해야

/bin/sh cat /sdcard/file1.mpg /sdcard/file2.mpg > /sdcard/out.mpg

을하지만 당신이 doeing하는 이유를 설명해 주 시겠어요? 이 명령은 명령 행을 실행하지 않고 pure java로 코딩 할 수있는 cp /sdcard/file1.mpg /sdcard/file2.mpg /sdcard/out.mpg과 정확히 동일하다는 것을 알고 계십니까? 특별한 이유가 없다면 계속하십시오! 가능한 경우 순수한 Java 코드를 작성하십시오. 디버깅, 지원 및 유지 관리가 더 쉽습니다.

+0

Java에서 할 수있는 것을 실행하기 위해 실행 파일을 실행하지 않는 것에 동의하지 않았지만, android에 'cp'바이너리가 없습니다. - 누군가가 실행 파일 (예 : adb 쉘 또는 해킹 된 기기에서 루트 도우미 프로세스를 시작할 때) 리디렉션과 함께 cat을 사용합니다. –

+0

OK AlexR, 파일을 연결하는 순수한 자바 접근 방식을 시도 할 것입니다. 프로세스 클래스를 사용하여/data/data/myapp의 일부 바이너리를 실행하고 자연스럽게/맹목적으로 내가 cat과 같은 파일을 실행했기 때문입니다. 이것도 – brux

+0

안드로이드 셸에는 cp가 없습니다. 확실히 고양이와 함께해야합니다. 그래서. – totten

2

이렇게하려면 '고양이'를 사용할 이유가 없습니다. Android에서 지원되거나 권장되는 메커니즘이 아니며 Java 코드에서 쉽게 수행 할 수있는 작업을 수행 할 수있는 새로운 실행 파일을 실행할 필요가 없습니다. 하나의 파일을 읽고 다른 파일에 기록하는 것입니다.

레코드의 경우 셸 리디렉션을 시도하고 있으며 셸을 실행하지 않으므로 작동하지 않습니다.

+0

그것에 대해 생각 해보지 못한 reaon은 여러 명령 (/ data/data/myapp에 압축을 풉니 다.)이 particlar 명령에 대한 순수한 자바 접근 방식을 시도합니다. – brux