我正在编写一个解析日志文件的Java类。需要将已编译的.class文件加载到第三方监视平台(eG)以进行部署和调用。不幸的是,第三方平台只允许我上传一个.class文件。
我当前的实现具有在符合文件掩码(* CJL * .log)的文件夹中查找“最新”文件的功能,并使用2个匿名类,一个用于过滤目录列表,另一个用于对列表进行排序基于ModifiedDt的文件。当我编译它时,我得到3个.class文件(Monitor.class,Monitor $ 1.class,Monitor $ 2.class),我无法部署。
是否可以将匿名类编译为单个.class文件以部署到第三方监控平台?
我附上了“查找最新文件”功能的代码以供说明。
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 "";
}
}
我认为可以通过获取原始文件列表并自行进行过滤/排序来实现“哑”方式,但我担心这样做不会有效。
任何想法?
迈克尔
答案 0 :(得分:4)
不可能是afaik。我假设一个罐子也不能使用。
解决方法是让类实现两个接口以消除对内部类的需要。
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 "";
}
}