我正在使用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");
它有效。所以我的猜测是工作目录(感谢术语)需要在某处设置。我正在使用Resin - 我应该在哪里设置这个?
谢谢!
答案 0 :(得分:3)
您可能是指user.dir system属性,它是只读的。相对路径使用此作为根文件夹。
答案 1 :(得分:0)
在java程序中,您无法更改运行位置。
首先,您应该了解程序的运行位置。你可以通过调用
来做到这一点System.out.println( new File( "." ).getAbsolutePath() );
现在您可以指定相对于此目录的路径。
答案 2 :(得分:0)
来自java.io.File doc
默认情况下,java.io包中的类始终根据当前用户目录解析相对路径名。此目录由系统属性user.dir命名,通常是调用Java虚拟机的目录。
一般来说,您不应该依赖当前目录来定位文件。如果可能的话,使用完整(绝对)路径(当然,不要在应用程序中对其进行编码)。如果文件位于webapp树内(或仅在类路径内),您可能需要查看findResource()及相关方法。