【问题标题】:relative path in project Java EE with Maven使用 Maven 的项目 Java EE 中的相对路径
【发布时间】:2014-04-27 12:36:04
【问题描述】:

我想使用 Bean 中的相对路径在 /WEB-INF/files 中上传文件。我在 Eclipse 中使用 Maven 项目 Java EE。这是 Bean 中的部分代码(包 Service.Bean):

// Create file with unique name in upload folder and write to it.
file = File.createTempFile(prefix + "_", "." + suffix,new File("/WEB-INF/files"));
output = new FileOutputStream(file);
IOUtils.copy(uploadedFile.getInputstream(), output);
fileName = file.getName();

这是例外:

java.io.IOException: Le chemin d’accès spécifié est introuvable
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(Unknown Source)
    at java.io.File.createTempFile(Unknown Source)
    at service.FileUploadController.handleFileUpload(FileUploadController.java:43)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:277)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at org.primefaces.component.fileupload.FileUpload.broadcast(FileUpload.java:290)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:755)
    at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
    at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

【问题讨论】:

    标签: eclipse maven jakarta-ee relative-path


    【解决方案1】:

    /WEB-INF/files 是绝对路径,所以File.createTempFile 方法在你的文件系统根目录下搜索WEB-INF 文件夹却找不到。最好使用:

    新的 File(Thread.currentThread().getContextClassLoader().getResource("../files").toURI())

    因为 WAR 中的默认类路径是 WEB-INF/classes。

    【讨论】:

    • 但我在此行中有错误消息:file = File.createTempFile(prefix + "_", "." + suffix,new File(ServletContext.getResource("/WEB-INF/files" ).toURI()));消息错误:无法从类型中对非静态方法 getResource(String) 进行静态引用
    • 我没有注意到它在 bean 中,没有 servlet 上下文!我已经编辑了我的答案。
    • 但是我们使用这种方法,我得到了类目录的相对路径??我想获取目录 /src/ressource 的相对路径(例如)??
    • 只需查看目录的部署位置,然后使用从类文件夹到该位置的相对路径。
    • 我在普通的JEE项目中使用了这个解决方案,但是我的项目是用Maven项目创建的
    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    相关资源
    最近更新 更多