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

如何使用URI创建java.io.File对象?,java,servlets,file-upload,java-io,Java,Servlets,File Upload,Java Io,用户可以在我的网站上传图片。我的servlet需要将上传内容写入我的webapp的目录映像中。要将其写入磁盘,我需要创建一个File()对象 一种方法是,我可以硬编码到以下内容的完整路径 new File("/usr/tomcat/webapps/ROOT/images/file.jpg") 有没有一种方法可以让我指定类似于新文件(“images/File.jpg”)的内容。。我可以使用新文件(URI)来完成它,这样我就不必硬编码完整的路径。我的servlet位于/usr/tomcat/web

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

一种方法是,我可以硬编码到以下内容的完整路径

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


“图像”文件夹不是目录。它实际上是一个符号链接,指向tomcat之外的文件系统上的另一个目录

您可以从ServletContext对象获取web应用程序路径。您可以从HttpServletRequest对象()获取ServletContext。


将“真实路径”连接到所需的图像文件路径,并将其作为参数提供给文件构造函数。

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

将图像以绝对路径存储在外部位置,并将Tomcat或其他web服务器配置为服务于此位置的图像,或实现服务于此位置的图像的servlet

有关其他指针,请参阅

编辑:

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

 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之外

文件命名始终由您决定,如果您希望保持相同的文件名,则需要处理重复检查,否则请指定一些动态格式并命名它