Java路径问题最终解决方案使用演示

37 篇文章 0 订阅
本文详细介绍了Java中处理路径问题的最终解决方案,并通过实例演示了如何应用这些技巧,包括import语句、异常处理和字符串操作。
摘要由CSDN通过智能技术生成

  Java路径问题最终解决方案使用演示

 
 
前言
本文中,我给大家提供了一个在JavaEE程序中使用这个便利方法寻找相对路径的代码实例。
在《 JavaEE路径陷阱之getRealPath》一文中,探讨了JavaEE程序中资源寻址的问题,有兴趣的读者可以看看那篇文章。
 
Java路径问题最终解决方案使用演示
示例背景
使用ClassLoaderUtil. getExtendResource()方法进行寻址的这个示例,是一个JavaEE程序,使用了SpringMVC框架进行前台开发。上传文件部分,使用了Apache的commons upload技术。
这个模块的功能是,向服务器上传一个JBoss的工作流引擎Jbpm的工作流定义文件。然后把它部署到服务器上。同时,把上传的工作流定义文件保存到服务器的    Web 应用程序根目录/WEB-INF/jbpm/upload/目录下,以备查阅!
 
源代码:
import java.io.File;
import java.net.URI;
import java.util.Date;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
 
import com.withub.common.base.BaseController;
import com.withub.common.util.ClassLoaderUtil;
import com.withub.common.util.IDeployProcessDefinition;
 
import com.withub.wcms.UrlMap;
import com.withub.wcms.manage.deployProcessDefinition.jbpm.bean.FileUploadBean;
 
/**
  * @author 沈东良 shendl_s@hotmail.com
  * Nov 27, 2006   1:31:25 PM
  * 这个类负责上传并部署 Jbpm 工作流定义文件
  * 并且把已上传的文件 copy Web 应用程序根目录 /WEB - INF/jbpm/upload/ 目录下,以备查阅!
  *
  */
public class UploadAndDeployJbpmProcessDefinition extends BaseController {
    /**
      * Service, 部署本地上传的 xml 业务程序定义文件到服务器端的数据库!
      * Bean 是单例。   运行时,不 set 这个变量。只在初始化载入 Spring 容器时调用 set 方法。注意同步资源!
      */
    private IDeployProcessDefinition deployProcessDefinition ;
    /**
      * 这个方法,直接返回上传、部署工作流定义页面。这是为了用 .page 控制上传页面的访问权。
      * @param request
      * @param response
      * @return
      * @throws Exception
      */
    public  ModelAndView list(HttpServletRequest request,HttpServletResponse response) throws Exception{
      
       return new ModelAndView(UrlMap.map( "manage.deployProcessDefinition.list" ));
    }
   
    /**
      *
      * @param request
      * @param response
      * @param command
      * @return
      * @throws Exception
      */
    public  ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,FileUploadBean command) throws Exception {
 
         
 
           // let's see if there's content there
           MultipartFile file = command.getFile();
           if (file == null ) {
                // hmm, that's strange, the user did not upload anything
             throw new RuntimeException( " 上传文件出错!未能成功上传文件! " );
            
           } else {
             // 部署上传的文件
              this .getDeployProcessDefinition().deployProcessDefinitionTransaction(file.getInputStream());
            File destFile= null ;
             /**
              * 使用自定义的方法,实现了相对于 classpath 的相对路径寻址。
              */
            String uploadPath=ClassLoaderUtil.getExtendResource( "../jbpm/upload/" ).toString();
            String uploadFile=uploadPath+String.valueOf( new Date().getTime())+ "_" +file.getOriginalFilename();
            destFile= new File( new URI(uploadFile));
            file.transferTo(destFile);
            
           }
 
            // well, let's do nothing with the bean for now and return
           //return super.onSubmit(request, response, command, errors);
           return new ModelAndView(UrlMap.map( "manage.deployProcessDefinition.success" ));
       }
 
   
 
    /**
      * @param args
      */
    public static void main(String[] args) {
       /**
         *
         */
 
    }
 
 
 
    /**
      * @return the deployProcessDefinition
      */
    public IDeployProcessDefinition getDeployProcessDefinition() {
       return deployProcessDefinition ;
    }
 
 
 
    /**
      * @param deployProcessDefinition the deployProcessDefinition to set
      */
    public void setDeployProcessDefinition(
           IDeployProcessDefinition deployProcessDefinition) {
       this . deployProcessDefinition = deployProcessDefinition;
    }
 
}
 
 
后记
这里,我使用了自己实现的 ClassLoaderUtil.getExtendResource()方法,实现了 相对于 classpath 的相对路径寻址。
没有使用ServletContext接口提供的寻址方法。这样的代码,不依赖于JavaEE环境,依赖的是标准的JavaSE,可以用在任何Java程序中!
如果你要使用ServletContext接口提供的寻址方法,那么请一定不要使用getRealPath(“/”)方法,而应该使用getResource()方法或者getResourceAsStream()方法寻址。参数应该是“/”开头的相对路径,相对的是Web应用程序根目录的相对路径,而不是classpath的相对路径。具体原因,在《 JavaEE路径陷阱之getRealPath》一文中作了详细的解释。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值