[英]Specifying a relative path in File in Java
我正在使用Spring和Hibernate上传图像。 我将图像保存在服务器上,如下所示。
File savedFile = new File("E:/Project/SpringHibernet/MultiplexTicketBooking/web/images/" + itemName);
item.write(savedFile);
其中itemName
是解析请求后的图像文件名( enctype="multipart/form-data"
)。 但是,我需要在File
的构造函数中提及相对路径 。 如下图所示。
File savedFile = new File("MultiplexTicketBooking/web/images/" + itemName);
item.write(savedFile);
但是抛出FileNotFoundException
是行不通的。 有没有一种方法可以在Java中使用File
指定相对路径?
尝试从程序中打印工作目录。
String curDir = System.getProperty("user.dir");
获取该目录。 然后检查目录MultiplexTicketBooking/web/images/
在该目录中是否存在。
无法计算我误认为当前目录并花了一些时间来寻找我写入的文件的次数...
您可以使用以下命令获取项目的路径-
File file = new File("");
System.out.println("" + file.getAbsolutePath());
因此,您可以拥有一个constants
或properties
文件,您可以在其中定义相对路径后的路径MultiplexTicketBooking/web/images/
。
您可以在路径中附加从file.getAbsolutePath()
获得的路径,这将是文件的真实路径。 file.getAbsolutePath() + MultiplexTicketBooking/web/images/
。
确保项目路径之后的文件夹(即MultiplexTicketBooking/web/images/
存在。
似乎服务器应该提供在getContextPath()
或getRealPath(String)
方法中可能看到的功能。 通常会基于与服务器相关且可复制的那些类型的路径来构建路径。 不要使用类似user.dir
,这使得几乎没有任何意义的服务器。
ServletContext sc=request.getSession().getServletContext();
File savedFile = new File(sc.getRealPath("images")+"\\" + itemName);
与其使用"\\\\"
不如将其替换为以下内容,这将导致为每个平台使用正确的文件分隔符。 当客户端决定将基于MS / ISS的服务器换成Linux / Tomcat堆栈时,保持跨平台兼容性。 ;)
File savedFile = new File(sc.getRealPath("images"), itemName); //note the ','
有关详细信息File(String,String)
请参见File(String,String)
。
您可以使用File
指定绝对路径和相对路径。 可能会引发FileNotFoundException
因为该文件夹可能在该文件夹中。 首先尝试使用mkdirs()
方法创建所需的文件夹结构,以便将文件保存在尝试保存的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.