我正在使用Maven和Tomcat進行一個小型RESTFul項目。在我的實現中,我必須讀取一個txt文件。 目前我正在測試Eclipse中的實現。當使用絕對路徑時,我可以毫無問題地執行我的代碼。由於我必須生成一個war文件,因此我需要在其中封裝txt文件。使用Maven和在WAR中讀取文件
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
我的war文件包含存儲在最高級別的txt文件。你有什麼建議從war文件裏讀取txt文件?我在這裏發現了幾個線程,但所有嘗試都失敗了。我需要一個規範,可以在Eclipse中測試時直接在Tomcat中執行時讀取文件。
由於沒有找到文本文件,所以在Eclipse中執行實現時,此代碼不起作用。該文件位於WebContent文件夾中,在生成快照/戰爭後,您可以在war文件中找到該文件。
InputStreamFactory isf = new InputStreamFactory() {
public InputStream createInputStream() throws IOException {
return new FileInputStream("/text_de.txt");
}
};
我也試過在Eclipse執行實施時無需訪問(我知道,在執行戰爭文件時,會導致錯誤)以下:
return new FileInputStream("/WebContent/text_de.txt");
UPDATE:
現在我可以在Eclipse中執行成功的實現。我先用註解@Resource試過,但改爲@context
@Context
ServletContext servletContext;
然後,我添加此行:
String fileLocation = System.getProperty("com.example.resourceLocation",servletContext.getRealPath("/text_de.txt"));
感謝
由於我的maven規範,/ WebContent /的內容最終在.war文件的根目錄中。我只是想能夠在Eclipse中執行實現(啓動Tomcat,將Project添加爲Eclipse中的服務器資源)以及.war文件。 – Matzka
也許我誤解了,你的意思是你需要從eclipse中的位置讀取文件嗎? 這可能會像「/Users/user/workspace/project/WebContent/text.txt」 比你可以在你的開發機器上使用系統屬性來覆蓋默認的生產環境... – mzijdemans
我正在開發服務在Eclipse中。戰爭文件將被集成到另一個Tomcat實例中。我需要一種讀取txt文件的方式,該文件在Eclipse中執行服務時用於測試pruposes以及在生產系統中執行.war文件時工作。在Eclipse中執行程序時,不會觸及.war文件。重寫讀取操作可能聽起來像是個好主意。 – Matzka