2011-10-10 8 views
2

내 홈 디렉토리 아래의 ~ 12 개의 디렉토리 또는 파일을 삭제하는 Java 프로그램을 작성하려고합니다. 나는 Java에서 Linux "cd"명령을 실행하는 방법은 무엇입니까?

Process proc = Runtime.getRuntime().exec("rm -rf *path*") 

를 사용하여이 작업을 수행 할 수 있어요하지만이 명령 12 시간을 실행해야 아니면 제가 루프를 유지할 수 있습니다. 필자가 정말로 원하는 것은 홈 디렉토리에있는 모든 디렉토리와 파일의 이름이 들어있는 파일을 가지고있는 것입니다. 내 Java 프로그램은 홈 디렉토리로 이동하여 파일을 읽고 지정된 모든 파일을 삭제해야합니다.

는 I은 첫 단계에서 막혔어요 - 나는 홈 디렉토리에 CD 할 수 없습니다입니다. 제가 어떻게 이것을 할 수 있는지 알려주십시오.


모든 답장을 보내 주셔서 감사합니다.

는하지만, 여기 정말 오히려 내가 리눅스 내 자바 클래스에서 명령을 실행할 수있는 사용 방법을 배우고 싶은 자바 폴더의 유틸리티 클래스를 사용하지 않습니다. 배치 인턴이므로 고객을위한 새로운 환경을 배치하기 전에 매번 환경을 재설정해야합니다. 이를 위해 몇 가지 기본 Linux 명령을 반복적으로 사용합니다. 이 작업을 수행하기 위해 쉘 스크립트를 작성할 수 있지만 이번에는이 모든 Linux 명령을 넣고 하나의 클래스에서 실행할 수있는 Java 클래스를 작성하려고합니다. 내가 사용하는

명령은 다음과 같습니다

  1. 만 관리자에 의해 시작되는 모든 자바 프로세스를 종료 -이를 위해 내가
  2. 모두 12 디렉토리를 제거 여러 리눅스는 "파이프"로 명령을 사용할 필요가 이를 위해 나는 등, 일부 데이터베이스 스크립트
  3. 실행을 특정 디렉토리 아래에 가서 또는 ./stop_ns을 ./shutdown.sh 실행해야합니다 -/홈 디렉토리의 파일은
  4. (시벨 등 같은) 일부 서비스를 중지 - 데이터베이스 스키마를 재설정하려면
  5. 다시 서비스를 시작 - 내가 ./start_ns을 실행하기 위해 필요한이 시간을 제외하고 2 단계와 같은 등

당신이 날 을 알릴 수 있다면 정말 감사드립니다. Java 코드 을 사용하여 디렉토리로 이동하는 방법은 무엇입니까? b. 어떻게 여러 리눅스는 자바 코드

+1

당신이 ['File.delete'] 사용하지 않는 이유 (http://download.oracle.com/javase/6/를 docs/api/java/io/File.html # delete())을 사용하는 것이 좋습니다. (해야) –

+0

제 편집 된 게시물을 확인하십시오. 나는 내가해야 할 일을 정확히 언급했다. – Jodi

+0

Jodi, 다음 중 하나를 권 해드립니다. a) 쉘 스크립트를 작성하여이 작업을 수행하십시오 (사용자가 원하지 않는 이유는 무엇입니까?), 매우 쉽게 수행해야합니다. 2) [Jon Skeet] (http://stackoverflow.com/a/7715879/1075247) sugests와 같이 java에서이를 수행 할 Java 프로그램을 작성하십시오. * 매우 * 당신이 큰 자바 프로그램의 일부로 실행되는 미리 작성된 쉘 스크립트의 일부가 아닌 한, 항아리에서 쉘 명령을 실행할 필요가 거의 없습니다 (그렇지 않으면 쉘 스크립트 만 작성하십시오!). 그래서 .jar에서 쉘 명령을 실행하는 이유는 무엇입니까? – Pureferret

답변

4

를 사용하여 파이프를 사용하여 명령을 실행할 수 있습니다 왜 당신은 홈 디렉토리에 "go"를해야합니까? 매우 드물게 좋은 생각이 프로세스가 바로 옳은 일을 작업 디렉토리 변경됩니다 것을 필요로하지 않는다 할 것

String homeDirectory = System.getProperty("user.home"); 
File file = new File(homeDirectory, "filenames.txt"); // Or whatever 

// Now load the file using "file" in the constructor call to FileInputStream etc 

: 그냥 당신이 어디에 있든 파일을 읽을.

1

당신은 디렉토리를 변경할 필요 없어요. FileReader (String fileName)를 사용하여 절대 경로를 사용하여 파일을 읽을 수 있습니다.

0

정말 그렇게 할 수 없습니다. Java 프로그램은 실제로 대부분의 사람들이 이해할 수 있도록 ("네이티브 코드를 사용하지 않고") "현재 작업 디렉토리"를 변경할 수 있도록 허용하지 않습니다. 일반적인 Java 접근법은 조작하려는 디렉토리에서 File 인스턴스를 연 다음 그 인스턴스에 대한 조작을 사용하여 해당 파일/디렉토리를 조작하는 것입니다.

자바 프로그래밍 방식으로 디렉토리를 삭제하는 방법에 대한 자세한 내용은

, 참조 : Delete directories recursively in Java

1

을 전체 디렉토리를 삭제 시도 아파치 코 몬즈 IO의 클래스 FileUtils :

FileUtils.deleteDirectory(new File(System.getProperty("user.home"))); 

또는 가정에서 모든 것을 삭제 cleanDirectory를 사용하지만 집 자체가 아닙니다 :

FileUtils.cleanDirectory(new File(System.getProperty("user.home"))); 

특정 파일 만 삭제하려는 경우 (예 : tching 이름 패턴) 먼저 파일을 나열, 다음 삭제 :

File startDir = new File(System.getProperty("user.home")); 

//this should return the leaf files first, then the inner nodes of the directory tree 
Collection<File> files = FileUtils.listFiles(startDir , someFileFiler, someDirFilter); 

for(File f : files) { 
    f.delete(); 
} 
관련 문제