gpt4 book ai didi

java - 如何在 Java 中以编程方式使用 unix 命令来删除生成的目录

转载 作者:行者123 更新时间:2023-12-01 21:50:09 25 4
gpt4 key购买 nike

我有一个Java代码,执行后会在其中生成目录和文件。目录名称如下:

ef3487f7457-43gfggf545-tgrg4536363-53345

ef3487f7457-43gfggf545-tgrg4536363-53462

ef3487f7457-43gfggf545-tgrg4536363-45742

每个目录中都有文件。

如何在java代码中删除这些目录?我对它们没有用处,它们只是增加了我的磁盘空间使用量。这是我在 checkin 任何内容之前运行的一些单元测试。

类似这样的事情:

@After
public void afterUnitTestExecution() {

logger.info("Deleting bullshit files...");
try {
java.lang.Runtime.getRuntime().exec("rm -r *-*");
} catch (IOException e) {
e.printStackTrace();
}
}

这段代码看起来应该可以工作,但事实并非如此。手动执行 rm -r *-* 可以工作,但在 Java 中执行(如上所示)则不行。怎么了?任何帮助或协助将不胜感激。谢谢

编辑:

谢谢大家的建议。不过,我不想使用 JUnit 特有的东西,我更喜欢使用标准传统 Java 而不是 Junit 来实现我的目标

最佳答案

使用 JUNit 临时文件夹

您应该使用旨在清理文件的 junit 规则。 JUnit 附带 TemporaryFolder这正是为此类单元测试而设计的。

The TemporaryFolder Rule allows creation of files and folders that should be deleted when the test method finishes (whether it passes or fails). Whether the deletion is successful or not is not checked by this rule. No exception will be thrown in case the deletion fails.

很容易将其集成到您的单元测试中:

public static class HasTempFolder {
@Rule
public TemporaryFolder folder= new TemporaryFolder();

@Test
public void testUsingTempFolder() throws IOException {
File createdFolder= folder.newFolder("subfolder");
// Run your code here
}
}

使用 shell 代码

您的代码不起作用的原因是因为 java 不像 shell 那样进行模式扩展,您可以通过启动执行删除的 shell 来模拟这一点:

new ProcessBuilder("sh", "-c", "rm -r *-*").inheritIO().start().waitFor();

使用纯java代码删除目录

您还可以使用纯java代码删除目录,使用File.listFiles()结合模式匹配器列出文件,然后调用File.delete() 删除文件。

Java 1.8

File f = new File("."); // Cuncurrent directory
Arrays.stream(f.listFiles(fi->fi.getName().match("[0-9a-f-]{36}"))).forEach(File::delete);

Java 1.6 及更高版本

File f = new File("."); // Cuncurrent directory
File[] files = f.listFiles(new FileFilter() {
public boolean accept(File fi) {
return fi.getName().match("[0-9a-f-]{36}");
}
});
for(File file : files) {
file.delete();
}

上面的代码使用正则表达式来查找文件,然后对它们调用删除。

关于java - 如何在 Java 中以编程方式使用 unix 命令来删除生成的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35357511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com