2010-05-09 115 views
2

訪問一個文件(寫)比方說,我有我的Java Web應用程序的這種結構:從一個JBoss Web服務

TheProject 
    -- [Web Pages] 
    -- -- abc.txt 
    -- -- index.jsp 
    -- [Source Packages] 
    -- -- [wservices] 
    -- -- -- WS.java 

WS.java是我的Web服務,這是坐落在一個wservices包。現在從這項服務,我需要訪問abc.txt文件並寫入它。

這是我的網址:

http://127.0.0.1:8080/TheProject/WS <- the webservice 
http://127.0.0.1:8080/TheProject/abc.txt <- the file I want to access 

讀取該文件,我triedgetResourceAsStream,我成功地從中讀取。但是現在我也想寫這個文件,而我tried這樣的方法卻失敗了。

有沒有一種方法可以從WS.java訪問abc.txt文件,並且能夠成功讀取和寫入它?

回答

0

您必須首先找到該文件,然後在其上打開一個File對象,然後可以照常使用該對象。從「getResource」返回的URL開始,並從那裏開始工作。

注意:此技巧假設應用程序服務器如何部署WAR文件,並使其不可移植。

+0

我試過了(http://stackoverflow.com/questions/2797367/write-to-a-file-stream-returned-from-getresourceasstream/ 2797381#2797381)但它失敗並出現'FileNotFoundException'異常。 – 2010-05-09 13:25:52

+0

然後您需要仔細調查返回的網址。 – 2010-05-09 13:26:58

0

那麼,讀取的訪問是可能的。您可以通過訪問以下路徑的文件訪問它:(我假設你的Web服務被打包WAR文件內)

@Resource 
private WebServiceContext context; 
...... 
// receive the realpath to foo.txt inside of web-archive deployment 
((ServletContext)context.getMessageContext().get(MessageContext.SERVLET_CONTEXT)).getRealPath("foo.txt") 

但書面方式有一般一個壞主意 - JBoss會將你的應用程序解壓到一些tmp文件夾。所以每次你的應用程序重新啓動,你會收到新的foo.txt