2013-02-16 2 views
0

java 코드를 사용하여 찾기 명령을 실행하려고합니다. 다음을 수행했습니다 :java 코드를 사용하여 * nix find 명령을 실행하십시오.

sysCommand = "find . -name '*out*' > file1" 

Runtime runtimeObj = Runtime.getRuntime(); 

try { 
    Process processObj = runtimeObj.exec(sysCommand); 
    processObj.waitFor(); 
    ... 

이 Linux 명령은 명령 줄을 사용할 때 실행되지만 Java에서는 실패합니다. 이유는 무엇입니까?

+2

무엇이 당신의 질문입니까? – Vulcan

+0

Java 코드 – Maxwell

답변

1

이 질문은 아마도 duplicate 또는 duplicate입니다.

  • 어쨌든, 당신은 당신이 원하는 파일 형식 에 필터를 제공 File.list를 사용할 수 있습니다. 모든 하위 디렉토리를 가져 오기 위해 재귀 적으로 호출 할 수 있습니다. 나는이 대답을 좋아하지 않는다. 더 간단한 방법이 있다고 생각할 것입니다.

  • 내 친구가 명령을 실행하기 위해 Apache에서 Commons-Exec을 권장했습니다. 그것은 당신이 명령에 타임 아웃을 사용할 수 있습니다. Runtime은 커다란 stdout과 stderr에 문제가있을 수 있기 때문에 그는 그것을 권장했습니다.

+0

을 사용하여이 명령을 실행할 수 없습니다. File.list가 하위 디렉토리에서 작동합니까? 마치 여러 개의 하위 디렉토리에 파일이있는 경우 작동합니다. – Maxwell

+0

아니요. 하위 디렉토리를 찾지 못할 것이라고 생각합니다. [이] (http://stackoverflow.com/questions/3008043/list-all-files-from-directories-and-subdirectories-in-java)보다 나은 방법이 있어야합니다. – Jess

+0

File.listFiles를 사용하여 하위 디렉토리를 검색하는 대답을 포함 시켰습니다. 나는'ProcessBuilder'를 사용할 것을 권합니다. 그러나 표준 출력/에러 버퍼가 채워지면 일부 운영체제가 프로세스를 멈추게하는 하위 프로세스를 만드는 것이 위험합니다. 당신은 그 물줄기를 소비해야합니다. –

1

내가 아는 한 Runtime.exec에는 배관 작업자를 사용할 수 없습니다. 결과를 파일로 이동하려면 Process.getInputStream을 통해 Java에서 해당 부분을 수행해야합니다.

public void find(File startDirectory, FileFilter filter, List<File> matches) { 
    File[] files = startDirectory.listFiles(filter); 
    for (File file:files) { 
     if(file.isDirectory()) { 
      find(file, filter, matches); 
     } else { 
      matches.add(file); 
     } 
    } 
} 

그런 다음 당신이 필요하지만 패턴과 일치하는 디렉토리와 파일을 허용하도록 FileFilter 쓰기 : 자바에서이 일에 관심이 있다면

1

당신은 이런 식으로 뭔가를 할 것입니다.

관련 문제