2016-09-22 124 views
0

我在包\'src \ main \ resources \'中有一個文件。我想讀其中位於「SRC \主\ java中的\ com \ XXXX \ XXXX \ SERVICES \」。當我運行下面的代碼,從Web應用程序的不同包中讀取文件

File USER_DIRECTORY = new File(System.getProperty("user.dir")); 
File DOCUMENT_DIRECTORY = new File(USER_DIRECTORY, "src/test/resources"); 
File template = new File(DOCUMENT_DIRECTORY, "input.docx"); 

我得到的值一個.java文件文件的USER_DIRECTORY作爲'C:\ workspace \ apache-tomcat-7.0.70 \ bin'和DOCUMENT_DIRECTORY作爲'C:\ workspace \ apache-tomcat-7.0.70 \ bin \ src \ test \ resources'。目標文件不在該位置。如果我在單元測試中運行相同的代碼,我會得到正確的值。有人可以幫助我如何從不同的包中讀取文件嗎?請讓我知道是否需要更多的信息來更好地瞭解問題。

+0

您是否使用任何構建工具,如maven或gradle? –

+0

查找['Class.getResource()'](https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResource(java.lang.String)) – qxz

+0

@ KarthikeyanVithitham是的,我正在使用maven – choom

回答

1

默認情況下,在Maven/Gradle中,src\main\resources中的資源將位於CLASSPATH中。

所以,如果你有一個在src\main\resources名爲input.docx文件就可以讀取文件,如下所示

File documentFile = new File(SomeClass.class.getResource("/input.docx").toURI()); 

如果該文件是在像sec\main\resources\documents下,那麼使用

File documentFile = new File(SomeClass.class.getResource("/documents/input.docx")); 

注:更換SomeClass與你的班級名稱。

+0

謝謝Karthikeyan Vaithilingam! 資源文件位於不同的模塊中。我爲documentFile獲得了以下值。 '文件:/ C:/workspace/XXXXXProject/web/target/ROOT/WEB-INF/lib/docx-1.5.0-SNAPSHOT.jar /input.docx'。獲取以下錯誤'java.lang.IllegalArgumentException:URI不是分層的' – choom

0

Maven不打包/ src/test/*中的任何類可用*
因此,在運行時,這些文件將不可用。如果你希望它們可用,你可以在maven中修改你的構建路徑(但是這引發了問題,爲什麼?),或者可能它應該位於/ src/main/resources中

這將自動進行可用。 請參閱@Karthikeyan Vaithilingam的答案。從那裏。

相關問題