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