2009-06-10 107 views
0

我正在寫一個解析日誌文件的Java類。編譯後的.class文件需要加載到第三方監控平臺(eG)中進行部署和調用。不幸的是,第三方平臺只允許我上傳一個.class文件。我可以將匿名或內部類編譯爲單個java .class文件嗎?

我目前的實現有一個功能,可以找到符合文件掩碼(* CJL * .log)的文件夾中的'latest'文件,並使用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 ""; 
    } 
} 

我想這是可以通過在獲得原始文件中列出,並做篩選/排序自己,但我擔心這會不會是高性能做到這一點,「無聲」的方式。

任何想法?

邁克爾

回答

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 ""; 
     } 
} 
+0

啊哈!輝煌!我完全沒有想到這一點。謝謝 :) – 2009-06-10 01:14:33

相關問題