如何使用URI创建java.io.File对象?

时间:2012-05-28 12:04:57

标签: java servlets file-upload java-io

用户可以在我的网站上传图片。我的servlet需要将上传内容写入我的webapp的目录映像中。要将其写入磁盘,我需要创建一个File()对象。

一种方法是我可以将完整路径硬编码为

new File("/usr/tomcat/webapps/ROOT/images/file.jpg")

有没有办法可以指定类似new File("images/file.jpg")的东西..我可以使用新文件(URI uri)来完成它,这样我就不必硬编码完整路径了。我的servlet位于/usr/tomcat/webapps/ROOT/WEB-INF/classes/

images文件夹不是目录。它实际上是一个符号链接,它指向tomcat外部文件系统上的另一个目录

3 个答案:

答案 0 :(得分:2)

不要在您的webapp部署目录下存储图像:下次重新部署应用时,您将丢失所有图像。而且,并不总是有一个webapp目录,因为它通常被部署为war文件。

将图像存储在外部位置,绝对路径,并配置Tomcat或其他Web服务器以从此位置提供图像,或实现从此位置提供图像的servlet。

有关其他指示,请参阅Image Upload and Display in JSP

编辑:

如果您的问题是Java代码中的硬编码绝对路径,请使用您在启动Tomcat时设置的System属性,或web.xml中的上下文参数,或使用属性文件存储路径,或者你的数据库。

答案 1 :(得分:0)

您可以从ServletContext对象获取Web应用程序路径。您从HttpServletRequest对象(http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getServletContext%28%29)获取ServletContext 见http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getRealPath%28java.lang.String%29
将“真实路径”连接到所需的图像文件路径,并将其作为File构造函数的参数提供。

答案 2 :(得分:0)

 try{    

String directory = //Store it in your Property file and pick it 

String filename= //Generate Dynamic name or any specific format 
   // Create file    
  FileWriter fstream = new FileWriter(directory+filename);   
  BufferedWriter out = new BufferedWriter(fstream);  
    out.write("your content"); }
catch (Exception e){   
  System.err.println("Error: " + e.getMessage()); }
finally {  
   //Close the output stream
     out.close();
 } 

如果不经常更改,您可以将目录路径保留在属性文件中。 目录名称可以是绝对路径,也可以是硬盘路径,也可以将其保存在webapp中,但始终建议将任何输入文件保留在webapp之外。

如果你想保留相同的文件名然后需要处理重复检查,那么文件命名总是取决于你,否则请指定一些动态格式并命名它。