我的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扩展名的文件。
谢谢!
您可以用这段代码做几件事情,老实说,我只需要重构一下,并将白名单作为扩展的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,则此方法不起作用,但是您可以将其倒置并使列表成为扩展名黑名单,或者使用regex匹配文件名。 ,以.log或.log结尾的任何文件。
此正则表达式将匹配出现在白名单条件下的任何文件名:
^.+(.log|.txt)(.\d)?$
您可以在这里看到一些匹配示例
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句