2014-09-05 73 views
0

編輯:我剛剛發現,不是IOExcpetion,但FilerException被拋出。因此,我在說明和標題中改變了這一點。Filer總是拋出FilerException

我正在使用Annotation Processing來爲我的java項目生成一些文件。現在,當Annotation Processing嘗試生成我的文件時,我總是得到一個FilerException

這是我創建文件的方式(GenClass和GenAnnotation是抽象生成的類的自定義類,它們在大約半年內沒有改變,所以我確信這個錯誤不在某處。我寫的文件,也沒有在去年改變):

public static boolean generateJavaSourceFile(final ProcessingEnvironment processingEnv, 
     final GenClass element, final String fileName, final Class<?> generatorClass) { 
    boolean succeed = false; 
    Writer fw = null; 
    Filer f = processingEnv.getFiler(); 

    // Mark the class as generated 
    GenAnnotation generatedAnnotation = getAnnotation(generatorClass); 
    element.pushImport(generatedAnnotation); 
    element.addAnnotation(generatedAnnotation); 

    try { 
     JavaFileObject jfo = f.createSourceFile(fileName, (Element[]) null); 
     // create new java source file 
     fw = jfo.openWriter(); 
     // write the GenClass object into file 
     fw.write(element.toString()); 

     succeed = true; 
    } catch (FilerException e) { 
     LOGGER.severe("Couldn't generate file (" + fileName + ")!"); 
     processingEnv.getMessager().printMessage(Kind.ERROR, 
               "Could not create source file " + fileName 
                 + " because it already exists"); 
     throw new RuntimeException(e.getMessage(), e); 
    } catch (IOException e) { 
     LOGGER.severe("Couldn't generate file (" + fileName + ")!"); 
     throw new RuntimeException(e.getMessage(), e); 
    } finally { 
     if (fw != null) { 
      try { 
       fw.close(); // flush and close the stream 
      } catch (IOException e) { 
       LOGGER.severe("Couldn't close file [" + fileName + "]!"); 
      } 
     } 
    } 
    LOGGER.fine(fileName + " written"); 
    return succeed; 

這是異常的消息:

Source file already created: /path/to/the/file/to/create 

我沒有改變我的處理器的東西,但只有錯誤發生在特定類型的文件中(我們使用Filters進行過濾數據),並且我沒有更改生成過濾器的處理器上的任何內容。我添加了一個新的處理器,使用不同的註釋並正確生成這些文件。

有誰知道這個錯誤的原因可能是什麼?

+0

您是否使用不同的文件名來使用generateJavaSourceFile?異常消息表示「指定名稱的文件已經創建,並且系統不能創建多個同名的文件」。我想你再使用一個文件名。 – 2014-09-05 08:53:24

+0

是的文件名是要寫入的類的標準名稱。 – mvieghofer 2014-09-05 08:54:47

+0

LOGGER.severe()記錄什麼?你如何得到這個異常消息「源文件已創建:/路徑/到/文件/到/創建」?異常消息中執行代碼時創建的文件名是否與文件名不同?如果它們不同,那麼異常消息中的文件名是什麼意思? – 2014-09-05 10:01:42

回答

0

我在另一個處理器(與生成過濾器的處理器無關)並且導致此錯誤時出錯。現在我修復了這個錯誤也停止了這種行爲。我不確定爲什麼這個FilerException總是發生,但它現在消失了。

相關問題