2011-10-10 207 views
2

我想編寫一個Java程序來刪除我的主目錄下的〜12個目錄或文件。我能夠做到這一點通過使用如何從Java運行Linux「cd」命令?

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

但我必須運行此命令12次或我可以保持它在循環。我真正想要的是在我的主目錄中有一個文件,其中包含要刪除的所有目錄和文件的名稱。我的Java程序應該進入主目錄,讀取文件並刪除所有指定的文件。

我被困在第一步 - 我無法cd到主目錄。請讓我知道我該怎麼做到這一點。


非常感謝您的回覆。

但是,在這裏我並不是真的想使用Java util類,而是想學習一種使用它可以在我的Java類中運行Linux命令的方法。作爲部署實習生,每次在爲客戶部署新環境之前都必須重置環境。爲此,我反覆使用一些基本的Linux命令。我可以編寫一個shell腳本來執行此操作,但是現在我想編寫一個Java類,在其中可以放入所有這些Linux命令並從一個類運行。

,我用的命令是:

  1. 殺死它們由管理員纔開始所有Java進程 - 爲了這個,我需要使用多個Linux與「管」命令
  2. 刪除所有12目錄/文件從主目錄
  3. 停止一些服務(如siebel等) - 爲此我需要去特定的目錄下運行./shutdown.sh或./stop_ns等
  4. 運行一些數據庫腳本 - 重置數據庫模式
  5. 再次啓動服務 - 同步驟,除了這一次,我需要運行./start_ns等

我真的很感激,如果你可以讓我知道 一個。如何使用Java代碼 b導航到目錄中。如何使用Java代碼使用管道運行多個Linux命令

+1

任何你不使用['File.delete']的原因(http://download.oracle.com/javase/6/ docs/api/java/io/File.html#delete())而不是脫殼? (你應該) –

+0

請看看我編輯的帖子。我提到了我需要做的事情。 – Jodi

+0

Jodi,我建議或者a)編寫一個shell腳本來做到這一點(我知道你說你不想,爲什麼?),應該很容易做到。 2)編寫一個java程序來做到這一點在java中,作爲[Jon Skeet](http://stackoverflow.com/a/7715879/1075247)sugests。 *很少*你需要從一個jar中運行一個shell命令,除非它們是一個預先編寫的shell腳本的一部分,它是作爲一個更大的java程序的一部分運行的(否則,只需編寫一個shell腳本!)。那麼,爲什麼你從.jar運行shell命令呢? – Pureferret

回答

4

爲什麼您需要「轉到」主目錄?只需讀取文件無論你在哪裏:

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實例,然後使用該實例上的操作來操作正在討論的文件/目錄。

有關如何在Java編程刪除目錄的詳細信息,請參閱: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"))); 

如果你想刪除特定的文件(例如那些馬然後刪除它們:

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(); 
}