2010-05-05 34 views
0

我正在使用Java在基於Web的程序上工作。我不確定如何對此進行描述,但我期望該程序將從c:/ Resin/webapps/apps目錄中運行。但是,當我在程序中引用一個文件時:「../files/randomfile.pdf」,它找不到該文件。它適用於我這樣引用它:「c:/Resin/webapps/files/randomfile.pdf」。如何更改「運行位置」? (什麼是這樣做的技術術語?)程序沒有從預期目錄運行?

try { 
    Document iTextDoc = new Document(PageSize.LETTER, 27, 27, 35, 18); 
    HttpServletResponse res = (HttpServletResponse) pageContext.getResponse(); 
    res.setContentType("application/vnd.ms-word"); 
    res.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".rtf;"); 

    RtfWriter2 rtfWriter = RtfWriter2.getInstance(iTextDoc, res.getOutputStream());  
    iTextDoc.open(); 
    iTextDoc.add(new Paragraph ("Testing RTF Letterhead with Logo")); 

    // Use full classname to avoid ambiguity with java.awt.Image 
    com.lowagie.text.Image logoImg = com.lowagie.text.Image.getInstance("../files/someimage.jpg"); 
    logoImg.setAlignment(Image.RIGHT | Image.TEXTWRAP); 
    iTextDoc.add(logoImg); 
    iTextDoc.add(new Paragraph ("Put other information about organization beneath logo")); 
    iTextDoc.close(); 
} 

我碰到下面的錯誤與生成的文件:ADOBE READER無法打開「SomeFile.pdf的」,因爲它是要麼不支持的文件類型,或者因爲文件已被損壞(例如,它是作爲電子郵件附件發送的,未正確解碼)。

但是,如果我改變的getInstance命令是:

com.lowagie.text.Image logoImg = com.lowagie.text.Image.getInstance("webapps/files/someimage.jpg"); 

它的工作原理。所以我的猜測是工作目錄(感謝這個詞)需要設置在某個地方。我使用樹脂 - 任何想法,我應該設置這個?

謝謝!

+0

「運行位置」通常被稱爲工作目錄,它可能不是應用程序所在的目錄。你如何引用這些文件(代碼片段)?問題可能是應用程序的目錄不在類路徑中。 – Paolo 2010-05-05 13:58:49

回答

0

在Java程序中,您無法更改運行位置。

首先,你應該找出你的程序在哪裏運行。您可以通過致電

System.out.println(new File(".").getAbsolutePath()); 

現在您可以指定相對於此目錄的路徑。

+1

-1,因爲使用「user.dir」的答案比較好,所以投票少。 – Daniel 2010-05-05 18:31:53

+1

@丹尼爾,你說得對。我只是不知道屬性「user.dir」。我也會贊成kgiannakakis的回答。 @twpc:你最好接受kgiannakakis的回答。 – tangens 2010-05-05 19:06:57

3

您可能指的是隻讀的user.dir system屬性。相對路徑將其用作根文件夾。

0

java.io.File DOC

默認情況下,java.io包中的類總是解決對當前用戶目錄相對路徑。該目錄由系統屬性user.dir命名,通常是調用Java虛擬機的目錄。

一般而言,您不應該依賴當前目錄來查找文件。如果可能的話,請使用完整(絕對)路徑(當然,不要在您的應用程序中對其進行編碼)。如果該文件位於Web應用程序樹內(或者僅在類路徑中),則可能需要查看findResource()和相關方法。