我正在编写一个解析日志文件的 Java 类。 编译后的.class文件需要加载到第三方监控平台(eG)中进行部署和调用。 不幸的是,第 3 方平台只允许我上传单个 .class 文件。
我当前的实现有一个功能,可以在符合文件掩码(*CJL*.log)的文件夹中查找“最新”文件,并使用 2 个匿名类,一个用于过滤目录列表,另一个用于对文件列表进行排序基于 ModifiedDt。 当我编译这个文件时,我得到了 3 个 .class 文件(Monitor.class、Monitor$1.class、Monitor$2.class),我无法部署它们。
是否可以将匿名类编译成单个.class文件以部署到第3方监控平台?
我附上了“查找最新文件”功能的代码以供说明。
private String FindLatestFile(String folderPath) {
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
if (name.endsWith(".log")
& name.contains("CJL"))
return true;
else
return false;
}
};
File dir = new File(folderPath);
File[] files = dir.listFiles(filter);
if (files.length > 0) {
Arrays.sort(files, new Comparator<File>() {
public int compare(File f1, File f2) {
return Long.valueOf(f1.lastModified()).compareTo(
f2.lastModified());
}
});
File newest = files[files.length - 1];
return newest.toString;
} else {
return "";
}
}
我想可以通过获取原始文件列表并自己进行过滤/排序来以“愚蠢”的方式做到这一点,但我担心这不会提高性能。
有什么想法吗?
不,据我所知这是不可能的。我认为罐子也不能使用。
一种解决方法是让类实现这两个接口,以消除对内部类的需要。
class MyClass implements FilenameFilter, Comparator<File> {
...
public boolean accept(File dir, String name) {
if (name.endsWith(".log") & name.contains("CJL"))
return true;
else
return false;
}
public int compare(File f1, File f2) {
return Long.valueOf(f1.lastModified()).compareTo(
f2.lastModified());
}
private String FindLatestFile(String folderPath) {
File dir = new File(folderPath);
File[] files = dir.listFiles(this);
if (files.length > 0) {
Arrays.sort(files, this);
File newest = files[files.length - 1];
return newest.toString;
} else {
return "";
}
}