gpt4 book ai didi

java - 在 Java 中排除文件名过滤器中的扩展名

转载 作者:太空宇宙 更新时间:2023-11-04 10:27:43 24 4
gpt4 key购买 nike

<小时/>

我的 Controller 方法(它具有在 JSP 上从属性文件中提到的路径列出文件的方法)

<小时/>
private String[] getFileListing(String servers) throws IOException {
Properties prop = new Properties();
String propFileName = "config.properties";
InputStream input = getClass().getClassLoader().getResourceAsStream(propFileName);

prop.load(input);

if (servers.equals("MS1")) {
File f = new File(prop.getProperty("path.MS1"));
String[] list = f.list(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".txt")||name.endsWith(".log");
}
});

return list;

} else {
File f = new File(prop.getProperty("path.MS2"));
String[] list = f.list(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".txt")||name.endsWith(".log");
}
});

return list;
}

}
<小时/>

我想显示具有常见扩展名的日志文件,例如 .txt 或 .log但系统也会创建扩展名为 .1 .2 .3 的文件。

  1. 是否有一种明确的方法来包含所有这些文件类型扩展名?
  2. 如果没有,那么如何显示目录中“排除”某些文件类型的所有文件。 (我想从目录中排除一些其他系统生成的文件)。

谢谢!

最佳答案

你可以用这段代码做一些事情,老实说,我只是稍微重构一下,让你的白名单成为扩展的 ArrayList。

例如:

private String[] getFileListing(String servers) throws IOException {
List<String> allowedExtensions = Arrays.asList("log txt".split(" "));
Properties prop = new Properties();
String propFileName = "config.properties";
InputStream input = getClass().getClassLoader().getResourceAsStream(propFileName);
prop.load(input);

File f = new File(prop.getProperty("path." + servers));
String[] list = f.list(new FilenameFilter() {
public boolean accept(File dir, String name) {
return allowedExtensions.contains(name.substring(name.lastIndexOf(".") + 1, name.length()));
}
});
return list;
}

但是,话虽这么说,您的代码中还有一些其他内容可以优化,例如,正如我在上面更改的那样,您正在检查服务器字符串是否等于某些内容,然后加载它,我假设是因为您只有 MS1 和 MS2,也就是说,如果意图是它始终在除 MS1 之外的每个服务器参数上加载 MS2,您可以这样做:

private String[] getFileListing(String servers) throws IOException {
List<String> allowedExtensions = Arrays.asList("log txt".split(" "));
Properties prop = new Properties();
String propFileName = "config.properties";
InputStream input = getClass().getClassLoader().getResourceAsStream(propFileName);
prop.load(input);

File f = new File(prop.getProperty("path.ms2"));
if(servers.equals("MS1")){
f = new File(prop.getProperty("path." + servers));
}
String[] list = f.list(new FilenameFilter() {
public boolean accept(File dir, String name) {
return allowedExtensions.contains(name.substring(name.lastIndexOf(".") + 1, name.length()));
}
});
return list;
}

如果您想支持其他内容,例如 .log.1 或 .log.2,则此方法不起作用,但您可以反转它并使列表成为扩展名黑名单,或者使用正则表达式来匹配文件名,例如,对于以 .log 或 .log 结尾的任何文件。

此正则表达式将匹配符合白名单条件的任何文件名:

^.+(.log|.txt)(.\d)?$

您可以通过一些示例匹配来看到这一点 here

关于java - 在 Java 中排除文件名过滤器中的扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50347417/

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