精华内容
下载资源
问答
  • 从服务器上下载文件 /** ** 文件下载 *@author jiejing * * / */ @ResponseBody @RequestMapping("/dadown") public void dadown(Integer did,String loginname,HttpServletResponse response,...

    从服务器上下载文件
    根据绝对路径下载文件

    
    	/**
    	 ** 文件下载
    	 *@author jiejing
    	 *
    	 * / 
    	 */
    	@ResponseBody
    	@RequestMapping("/dadown")
    	public void dadown(Integer did,String loginname,HttpServletResponse response,HttpServletRequest request){
    		Qdatum dadown = datumServiceImpl.dadown(loginname,did);
    		String durl = dadown.getDurl();//得到文件存储路径
    		String dtitle = dadown.getDtitle();文件文件名称
    		DataDown d = new DataDown();
    			try {
    				d.downauthimg(durl, dtitle,null,null);
    			} catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		
    	}
    	
    

    下载工具类方法:

     public HttpServletResponse download(String path,String dtitle, HttpServletResponse response,HttpServletRequest request) {
    	        try {
    	            // path是指欲下载的文件的路径。
    	            File file = new File(path);
    	            // 取得文件名。
    	            String filename = dtitle;
    	           //filename = new String(filename.getBytes(), "ISO-8859-1");
    	           // filename = URLEncoder.encode(filename, "UTF-8");
    	           // response.setHeader("Content-Disposition","attachment;filename="+filename);
    	            // 取得文件的后缀名。
    	            String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
    
    	            // 以流的形式下载文件。
    	            InputStream fis = new BufferedInputStream(new FileInputStream(path));
    	            byte[] buffer = new byte[fis.available()];
    	            fis.read(buffer);
    	            fis.close();
    	            // 清空response
    	            response.reset();
    	            // 设置response的Header
    	            //解决获得中文参数的乱码问题----
    	            //filename = new String(filename.getBytes("ISO8859-1"),"UTF-8");//美女.jpg
    
    	           // response.addHeader("Content-Disposition", "attachment;filename=" + filename);
    	            response.addHeader("Content-Disposition", "attachment;filename="
    	            		+ new String(filename.getBytes("utf-8"), "ISO-8859-1"));
    	            response.addHeader("Content-Length", "" + file.length());
    	            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
    	            response.setContentType("application/octet-stream");
    	            toClient.write(buffer);
    	            toClient.flush();
    	            toClient.close();
    	        } catch (IOException ex) {
    	            ex.printStackTrace();
    	        }
    	        return response;
    	    }
    
    	   
    
    展开全文
  • ====================================================== 注:本文源代码点此下载 ==========================...绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(url和物理路径)例如: c:xyz es

    ======================================================
    注:本文源代码点此下载
    ======================================================

    转自 链接

    1.基本概念的理解

    绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(url和物理路径)例如:

    c:xyz est.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个url绝对路径。

    相对路径:相对与某个基准目录的路径。包含web的相对路径(html中的相对目录),例如:在

    servlet中,"/"代表web应用的跟目录。和物理路径的相对表示。例如:"./" 代表当前目录,"../"代表上级目录。这种类似的表示,也是属于相对路径。

    另外关于uri,url,urn等内容,请参考rfc相关文档标准。

    rfc 2396: uniform resource identifiers (uri): generic syntax,

    (http://www.ietf.org/rfc/rfc2396.txt)

    2.关于jsp/servlet中的相对路径和绝对路径。

    2.1服务器端的地址

    服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http: //192.168.0.1/webapp/的。

    其用到的地方有:

    forward:servlet中的request.getrequestdispatcher(address);这个address是在服务器端解析的,所以,你要forward到a.jsp应该这么写:request.getrequestdispatcher(“/user/a.jsp”)这个/ 相对于当前的web应用webapp,其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。 sendredirect:在jsp中

    2.22、客户端的地址

    所有的html页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/)的,而不是(跟目录下的该web应用的目录) http://192.168.0.1/webapp/的。 html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.0.1/)的,所以,如果提交到a.jsp 为:action="/webapp/user/a.jsp"或action=""/user/a.jsp;

    提交到servlet为actiom="/webapp/handleservlet" javascript也是在客户端解析的,所以其相对路径和form表单一样。

    因此,一般情况下,在jsp/html页面等引用的css,javascript.action等属性前面最好都加上

    ,以确保所引用的文件都属于web应用中的目录。另外,应该尽量避免使用类似".","./","http://www.cnblogs.com/"等类似的相对该文件位置的相对路径,这样当文件移动时,很容易出问题。

    3. jsp/servlet中获得当前应用的相对路径和绝对路径

    3.1 jsp中获得当前应用的相对路径和绝对路径

    根目录所对应的绝对路径:request.getrequesturi()

    文件的绝对路径:application.getrealpath(request.getrequesturi());

    当前web应用的绝对路径 :application.getrealpath("/");

    取得请求文件的上层目录:new file(application.getrealpath(request.getrequesturi())).getparent()

    3.2 servlet中获得当前应用的相对路径和绝对路径

    根目录所对应的绝对路径:request.getservletpath();

    文件的绝对路径 :request.getsession().getservletcontext().getrealpath

    (request.getrequesturi())

    当前web应用的绝对路径 :servletconfig.getservletcontext().getrealpath("/");

    (servletcontext对象获得几种方式:

    javax.servlet.http.httpsession.getservletcontext()

    javax.servlet.jsp.pagecontext.getservletcontext()

    javax.servlet.servletconfig.getservletcontext()

    )

    4.java 的class中获得相对路径,绝对路径的方法

    4.1单独的java类中获得绝对路径

    根据java.io.file的doc文挡,可知:

    默认情况下new file("/")代表的目录为:system.getproperty("user.dir")。

    一下程序获得执行类的当前路径

    package org.cheng.file;

    import java.io.file;

    public class filetest {

    public static void main(string[] args) throws exception {

    system.out.println(thread.currentthread().getcontextclassloader().getresource(""));

    system.out.println(filetest.class.getclassloader().getresource(""));

    system.out.println(classloader.getsystemresource(""));

    system.out.println(filetest.class.getresource(""));

    system.out.println(filetest.class.getresource("/"));

    //class文件所在路径

    system.out.println(new file("/").getabsolutepath());

    system.out.println(system.getproperty("user.dir"));

    }

    }

    4.2服务器中的java类获得当前路径(来自网络)

    (1).weblogic

    webapplication的系统文件根目录是你的weblogic安装所在根目录。

    例如:如果你的weblogic安装在c:eaweblogic700.....

    那么,你的文件根路径就是c:.

    所以,有两种方式能够让你访问你的服务器端的文件:

    a.使用绝对路径:

    比如将你的参数文件放在c:yourconfigyourconf.properties,

    直接使用 new fileinputstream("yourconfig/yourconf.properties");

    b.使用相对路径:

    相对路径的根目录就是你的webapplication的根路径,即web-inf的上一级目录,将你的参数文件放

    在yourwebappyourconfigyourconf.properties,

    这样使用:

    new fileinputstream("./yourconfig/yourconf.properties");

    这两种方式均可,自己选择。

    (2).tomcat

    在类中输出system.getproperty("user.dir");显示的是%tomcat_home%/bin

    (3).resin

    不是你的jsp放的相对路径,是jsp引擎执行这个jsp编译成servlet

    的路径为根.比如用新建文件法测试file f = new file("a.htm");

    这个a.htm在resin的安装目录下

    (4).如何读相对路径哪?

    在java文件中getresource或getresourceasstream均可

    例:getclass().getresourceasstream(filepath);//filepath可以是"/filename",这里的/代表web

    发布根路径下web-inf/classes

    默认使用该方法的路径是:web-inf/classes。已经在tomcat中测试。

    5.读取文件时的相对路径,避免硬编码和绝对路径的使用。(来自网络)

    5.1 采用spring的di机制获得文件,避免硬编码。

    参考下面的连接内容:

    http://www.javajia.net/viewtopic.php?p=90213&

    5.2 配置文件的读取

    参考下面的连接内容:

    http://dev.csdn.net/develop/article/39/39681.shtm

    5.3 通过虚拟路径或相对路径读取一个xml文件,避免硬编码

    参考下面的连接内容:

    http://club.gamvan.com/club/clubpage.jsp?ipage=1&tid=10708&ccid=8

    6.java中文件的常用操作(复制,移动,删除,创建等)(来自网络)

    常用 java file 操作类

    http://www.easydone.cn/014/200604022353065155.htm

    java文件操作大全(jsp中)

    http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html

    java文件操作详解(java中文网)

    http://www.51cto.com/html/2005/1108/10947.htm

    java 如何创建删除修改复制目录及文件

    http://www.gamvan.com/developer/java/2005/2/264.html

    总结:

    通过上面内容的使用,可以解决在web应用服务器端,移动文件,查找文件,复制

    删除文件等操作,同时对服务器的相对地址,绝对地址概念更加清晰。

    建议参考uri,的rfc标准文挡。同时对java.io.file. java.net.uri.等内容了解透彻

    对其他方面的理解可以更加深入和透彻。


    ======================================================
    在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
    展开全文
  • } script> java后端 @RequestMapping("/save.do") public void save(Contract contract, @RequestParam("uploadFile") MultipartFile file, HttpServletRequest request) throws Exception { String trueName = ...

    准备

    首先导入两个jar包,下方是maven依赖,版本可自己选

    		<dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>1.4</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.2</version>
            </dependency>
    

    html

    <form name="form" action="" enctype="multipart/form-data"
    				method="post">
    	<input type="file" name="uploadFile" id="upload">
    	<button type="submit" onclick="formSave()">保存</button>
    </form>
    
    <script>
    function formSave() {
    	document.form.action="${pageContext.request.contextPath}/test/save.do";
    }
    </script>
    

    java后端

    @RequestMapping("/save.do")
    public void save(Contract contract, @RequestParam("uploadFile") MultipartFile file, HttpServletRequest	request) throws Exception {
            String trueName = file.getOriginalFilename();
            String path = "d:/";  //自己设置一个路径
    
            File file1 = new File(path + trueName);
            String uploadURL = path + trueName;
    //        判断当前文件父级文件夹是否存在,如果不存在,就创建文件夹
            if (!file1.getParentFile().exists()) {
                file1.mkdirs();
            }
            try {
    //            上传文件,核心功能
                file.transferTo(file1);
            } catch (IOException e) {
                e.printStackTrace();
            }
    		
    }
    

    几个注意点

    在这里插入图片描述

    接下来就是写service层和dao层,很简单,普通的增删改查(略)

    下载

    
    <a href="${pageContext.request.contextPath}/contract/downLoadAppendices.do?id=${contract.ID}">下载</a>
    
    
        @RequestMapping("/downLoadAppendices.do")
        public void downLoadAppendices(HttpServletRequest request,HttpServletResponse response) throws IOException {
        //前端传id值,根据id值查出数据库字段中的地址字符串
            String id = request.getParameter("id");
            String path = contractService.downLoadAppendices(id);
            // 修改文件名的编码格式
            String fName = path.trim();
            String fileName = fName.substring(fName.lastIndexOf("/")+1);
            ServletContext servletContext = request.getServletContext();
            FileInputStream fis = new FileInputStream(path);
            //MIME类型:在互联网通信过程中定义的一种文件数据类型
            String mimeType = servletContext.getMimeType(fileName);
            response.setHeader("content-type",mimeType);
            response.setHeader("content-disposition","attachment;filename="+fileName);
            ServletOutputStream sos = response.getOutputStream();
            byte[] buff = new byte[1024];
            int len = 0;
            while((len=fis.read(buff))!=-1){
                sos.write(buff,0,len);
            }
            fis.close();
        }
    
    展开全文
  • 文件路径分为绝对路径和相对路径,在项目中页面跳转、配置文件读写、文件上传下载等等许多地方都涉及到文件路径问题。 一篇好文转载于此:http://blog.csdn.net/shendl/archive/2006/12/03/1427475.aspx    ...

    文件路径分为绝对路径和相对路径,在项目中页面跳转、配置文件读写、文件上传下载等等许多地方都涉及到文件路径问题。

    一篇好文转载于此:http://blog.csdn.net/shendl/archive/2006/12/03/1427475.aspx

     

     Java路径问题最终解决方案
                                                                                                               —可定位所有资源的相对路径寻址
     
     
     
    前言
    Java的路径问题,非常难搞。最近的工作涉及到创建和读取文件的工作,这里我就给大家彻底得解决Java路径问题。
    我编写了一个方法,比ClassLoader.getResource(String 相对路径)方法的能力更强。它可以接受“../”这样的参数,允许我们用相对路径来定位classpath外面的资源。这样,我们就可以使用相对于classpath的路径,定位所有位置的资源!
     
    Java路径
    Java中使用的路径,分为两种:绝对路径和相对路径。具体而言,又分为四种:
    一、URI形式的绝对资源路径
    如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b
    URL是URI的特例。URL的前缀/协议,必须是Java认识的。URL可以打开资源,而URI则不行。
    URL和URI对象可以互相转换,使用各自的toURI(),toURL()方法即可!
     
    二、本地系统的绝对路径
    D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b
    Java.io包中的类,需要使用这种形式的参数。
    但是,它们一般也提供了URI类型的参数,而URI类型的参数,接受的是URI样式的String。因此,通过URI转换,还是可以把URI样式的绝对路径用在java.io包中的类中。
     
    三、相对于classpath的相对路径
    如:相对于
    file:/D:/java/eclipse32/workspace/jbpmtest3/bin/这个路径的相对路径。其中,bin是本项目的classpath。所有的Java源文件编译后的.class文件复制到这个目录中。
     
     
    四、相对于当前用户目录的相对路径
    就是相对于System.getProperty("user.dir")返回的路径。
    对于一般项目,这是项目的根路径。对于JavaEE服务器,这可能是服务器的某个路径。这个并没有统一的规范!
    所以,绝对不要使用“相对于当前用户目录的相对路径”。然而:
    默认情况下,java.io 包中的类总是根据当前用户目录来分析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。
    这就是说,在使用java.io包中的类时,最好不要使用相对路径。否则,虽然在J2SE应用程序中可能还算正常,但是到了J2EE程序中,一定会出问题!而且这个路径,在不同的服务器中都是不同的!
     
    相对路径最佳实践
    推荐使用相对于当前classpath的相对路径
    因此,我们在使用相对路径时,应当使用相对于当前classpath的相对路径。
    ClassLoader类的getResource(String name),getResourceAsStream(String name)等方法,使用相对于当前项目的classpath的相对路径来查找资源。
    读取属性文件常用到的ResourceBundle类的getBundle(String path)也是如此。
    通过查看ClassLoader类及其相关类的源代码,我发现,它实际上还是使用了URI形式的绝对路径。通过得到当前classpath的URI形式的绝对路径,构建了相对路径的URI形式的绝对路径。(这个实际上是猜想,因为JDK内部调用了SUN的源代码,而这些代码不属于JDK,不是开源的。)
     
    相对路径本质上还是绝对路径
    因此,归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!
     
    得到classpath和当前类的绝对路径的一些方法
        下面是一些得到classpath和当前类的绝对路径的一些方法。你可能需要使用其中的一些方法来得到你需要的资源的绝对路径。
    1,FileTest.class.getResource("")
    得到的是当前类FileTest.class文件的URI目录。不包括自己!
    如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/
    2,FileTest.class.getResource("/")
    得到的是当前的classpath的绝对URI路径。
    如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
    3,Thread.currentThread().getContextClassLoader().getResource("")
    得到的也是当前ClassPath的绝对URI路径。
    如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
    4,FileTest.class.getClassLoader().getResource("")
    得到的也是当前ClassPath的绝对URI路径。
    如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
    5,ClassLoader.getSystemResource("")
    得到的也是当前ClassPath的绝对URI路径。
    如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/
        
    我推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法。
     
    Web应用程序中资源的寻址
        上文中说过,当前用户目录,即相对于System.getProperty("user.dir")返回的路径。
    对于JavaEE服务器,这可能是服务器的某个路径,这个并没有统一的规范!
    而不是我们发布的Web应用程序的根目录!
    这样,在Web应用程序中,我们绝对不能使用相对于当前用户目录的相对路径。
    在Web应用程序中,我们一般通过ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径。
    这样,我们只需要提供相对于Web应用程序根目录的路径,就可以构建出定位资源的绝对路径。
    这是我们开发Web应用程序时一般所采取的策略。
     
    通用的相对路径解决办法
    Java中各种相对路径非常多,不容易使用,非常容易出错。因此,我编写了一个便利方法,帮助更容易的解决相对路径问题。
     
    Web应用程序中使用JavaSE运行的资源寻址问题
    在JavaSE程序中,我们一般使用classpath来作为存放资源的目的地。但是,在Web应用程序中,我们一般使用classpath外面的WEB-INF及其子目录作为资源文件的存放地。
    在Web应用程序中,我们一般通过ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径。这样,我们只需要提供相对于Web应用程序根目录的路径,就可以构建出定位资源的绝对路径。
    Web应用程序,可以作为Web应用程序进行发布和运行。但是,我们也常常会以JavaSE的方式来运行Web应用程序的某个类的main方法。或者,使用JUnit测试。这都需要使用JavaSE的方式来运行。
    这样,我们就无法使用ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径。
    而JDK提供的ClassLoader类,
    它的getResource(String name),getResourceAsStream(String name)等方法,使用相对于当前项目的classpath的相对路径来查找资源。
    读取属性文件常用到的ResourceBundle类的getBundle(String path)也是如此。
    它们都只能使用相对路径来读取classpath下的资源,无法定位到classpath外面的资源。
    Classpath外配置文件读取问题
    如,我们使用测试驱动开发的方法,开发springhibernate、iBatis等使用配置文件的Web应用程序,就会遇到问题。
    尽管Spring自己提供了FileSystem(也就是相对于user,dir目录)来读取Web配置文件的方法,但是终究不是很方便。而且与Web程序中的代码使用方式不一致!
    至于Hibernate,iBatis就更麻烦了!只有把配置文件移到classpath下,否则根本不可能使用测试驱动开发!
     
        这怎么办?
     
    通用的相对路径解决办法
    面对这个问题,我决定编写一个助手类ClassLoaderUtil,提供一个便利方法[public static URL getExtendResource(String relativePath)]。在Web应用程序等一切Java程序中,需要定位classpath外的资源时,都使用这个助手类的便利方法,而不使用Web应用程序特有的ServletContext.getRealPath("/")方法来定位资源。
     
    利用classpath的绝对路径,定位所有资源
    这个便利方法的实现原理,就是“利用classpath的绝对路径,定位所有资源”。
    ClassLoader类的getResource("")方法能够得到当前classpath的绝对路径,这是所有Java程序都拥有的能力,具有最大的适应性!
    而目前的JDK提供的ClassLoader类的getResource(String 相对路径)方法,只能接受一般的相对路径。这样,使用ClassLoader类的getResource(String 相对路径)方法就只能定位到classpath下的资源。
    如果,它能够接受“../”这样的参数,允许我们用相对路径来定位classpath外面的资源,那么我们就可以定位位置的资源!
    当然,我无法修改ClassLoader类的这个方法,于是,我编写了一个助手类ClassLoaderUtil类,提供了[public static URL getExtendResource(String relativePath)]这个方法。它能够接受带有“../”符号的相对路径,实现了自由寻找资源的功能。
     
    通过相对classpath路径实现自由寻找资源的助手类的源代码:

    [java] view plain copy
    1. import java.io.IOException;  
    2. import java.io.InputStream;  
    3. import java<a href="http://lib.csdn.net/base/dotnet" class='replace_word' title=".NET知识库" target='_blank' style='color:#df3434; font-weight:bold;'>.NET</a>.MalformedURLException;  
    4. import java<a href="http://lib.csdn.net/base/dotnet" class='replace_word' title=".NET知识库" target='_blank' style='color:#df3434; font-weight:bold;'>.Net</a>.URL;  
    5. import java.util.Properties;  
    6.    
    7. import org.apache.commons.logging.Log;  
    8. import org.apache.commons.logging.LogFactory;  
    9.    
    10. /** 
    11.  *@author沈东良shendl_s@hotmail.com 
    12.  *Nov29,2006 10:34:34AM 
    13.  *用来加载类,classpath下的资源文件,属性文件等。 
    14.  *getExtendResource(StringrelativePath)方法,可以使用../符号来加载classpath外部的资源。 
    15.  */  
    16. publicclass ClassLoaderUtil {  
    17.     privatestatic Log log=LogFactory.getLog(ClassLoaderUtil.class);  
    18.     /** 
    19.      *Thread.currentThread().getContextClassLoader().getResource("") 
    20.      */  
    21.       
    22.     /** 
    23.      *加载Java类。 使用全限定类名 
    24.      *@paramclassName 
    25.      *@return 
    26.      */  
    27.     publicstatic Class loadClass(String className) {  
    28.         try {  
    29.           return getClassLoader().loadClass(className);  
    30.         } catch (ClassNotFoundException e) {  
    31.           thrownew RuntimeException("class not found '"+className+"'", e);  
    32.         }  
    33.      }  
    34.      /** 
    35.        *得到类加载器 
    36.        *@return 
    37.        */  
    38.      publicstatic ClassLoader getClassLoader() {  
    39.        
    40.         return ClassLoaderUtil.class.getClassLoader();  
    41.      }  
    42.      /** 
    43.        *提供相对于classpath的资源路径,返回文件的输入流 
    44.        *@paramrelativePath必须传递资源的相对路径。是相对于classpath的路径。如果需要查找classpath外部的资源,需要使用../来查找 
    45.        *@return 文件输入流 
    46.      *@throwsIOException 
    47.      *@throwsMalformedURLException 
    48.        */  
    49.      publicstatic InputStream getStream(String relativePath) throws MalformedURLException, IOException {  
    50.          if(!relativePath.contains("../")){  
    51.              return getClassLoader().getResourceAsStream(relativePath);  
    52.                
    53.          }else{  
    54.              return ClassLoaderUtil.getStreamByExtendResource(relativePath);  
    55.          }  
    56.           
    57.      }  
    58.      /** 
    59.        * 
    60.        *@paramurl 
    61.        *@return 
    62.        *@throwsIOException 
    63.        */  
    64.      publicstatic InputStream getStream(URL url) throws IOException{  
    65.          if(url!=null){  
    66.                
    67.                 return url.openStream();  
    68.               
    69.                
    70.          }else{  
    71.              returnnull;  
    72.          }  
    73.      }  
    74.      /** 
    75.        * 
    76.        *@paramrelativePath必须传递资源的相对路径。是相对于classpath的路径。如果需要查找classpath外部的资源,需要使用../来查找 
    77.        *@return 
    78.        *@throwsMalformedURLException 
    79.        *@throwsIOException 
    80.        */  
    81.      publicstatic InputStream getStreamByExtendResource(String relativePath) throws MalformedURLException, IOException{  
    82.         return ClassLoaderUtil.getStream(ClassLoaderUtil.getExtendResource(relativePath));  
    83.            
    84.            
    85.      }  
    86.        
    87.       /** 
    88.        *提供相对于classpath的资源路径,返回属性对象,它是一个散列表 
    89.        *@paramresource 
    90.        *@return 
    91.        */  
    92.      publicstatic Properties getProperties(String resource) {  
    93.         Properties properties = new Properties();  
    94.         try {  
    95.           properties.load(getStream(resource));  
    96.         } catch (IOException e) {  
    97.           thrownew RuntimeException("couldn't load properties file '"+resource+"'", e);  
    98.         }  
    99.         return properties;  
    100.      }  
    101.      /** 
    102.        *得到本Class所在的ClassLoader的Classpat的绝对路径。 
    103.        *URL形式的 
    104.        *@return 
    105.        */  
    106.      publicstatic String getAbsolutePathOfClassLoaderClassPath(){  
    107.            
    108.            
    109.          ClassLoaderUtil.log.info(ClassLoaderUtil.getClassLoader().getResource("").toString());  
    110.          return ClassLoaderUtil.getClassLoader().getResource("").toString();  
    111.            
    112.      }  
    113.      /** 
    114.        * 
    115.        *@paramrelativePath 必须传递资源的相对路径。是相对于classpath的路径。如果需要查找classpath外部的资源,需要使用../来查找 
    116.        *@return资源的绝对URL 
    117.      *@throwsMalformedURLException 
    118.        */  
    119.      publicstatic URL getExtendResource(String relativePath) throws MalformedURLException{  
    120.        
    121.          ClassLoaderUtil.log.info("传入的相对路径:"+relativePath) ;  
    122.          //ClassLoaderUtil.log.info(Integer.valueOf(relativePath.indexOf("../"))) ;  
    123.          if(!relativePath.contains("../")){  
    124.              return ClassLoaderUtil.getResource(relativePath);  
    125.                
    126.          }  
    127.          String classPathAbsolutePath=ClassLoaderUtil.getAbsolutePathOfClassLoaderClassPath();  
    128.          if(relativePath.substring(01).equals("/")){  
    129.              relativePath=relativePath.substring(1);  
    130.          }  
    131.          ClassLoaderUtil.log.info(Integer.valueOf(relativePath.lastIndexOf("../"))) ;  
    132.           
    133.          String wildcardString=relativePath.substring(0,relativePath.lastIndexOf("../")+3);  
    134.         relativePath=relativePath.substring(relativePath.lastIndexOf("../")+3);  
    135.          int containSum=ClassLoaderUtil.containSum(wildcardString, "../");  
    136.          classPathAbsolutePath= ClassLoaderUtil.cutLastString(classPathAbsolutePath, "/", containSum);  
    137.          String resourceAbsolutePath=classPathAbsolutePath+relativePath;  
    138.          ClassLoaderUtil.log.info("绝对路径:"+resourceAbsolutePath) ;  
    139.          URL resourceAbsoluteURL=new URL(resourceAbsolutePath);  
    140.          return resourceAbsoluteURL;  
    141.      }  
    142.      /** 
    143.       * 
    144.        *@paramsource 
    145.        *@paramdest 
    146.        *@return 
    147.        */  
    148.      privatestaticint containSum(String source,String dest){  
    149.          int containSum=0;  
    150.          int destLength=dest.length();  
    151.          while(source.contains(dest)){  
    152.              containSum=containSum+1;  
    153.              source=source.substring(destLength);  
    154.                
    155.          }  
    156.            
    157.            
    158.          return containSum;  
    159.      }  
    160.      /** 
    161.        * 
    162.        *@paramsource 
    163.        *@paramdest 
    164.        *@paramnum 
    165.        *@return 
    166.        */  
    167.      privatestatic String cutLastString(String source,String dest,int num){  
    168.          // String cutSource=null;  
    169.          for(int i=0;i<num;i++){  
    170.              source=source.substring(0, source.lastIndexOf(dest, source.length()-2)+1);  
    171.                
    172.                
    173.          }  
    174.            
    175.            
    176.            
    177.          return source;  
    178.      }  
    179.      /** 
    180.        * 
    181.        *@paramresource 
    182.        *@return 
    183.        */  
    184.       publicstatic URL getResource(String resource){  
    185.       ClassLoaderUtil.log.info("传入的相对于classpath的路径:"+resource) ;  
    186.          return ClassLoaderUtil.getClassLoader().getResource(resource);  
    187.      }  
    188.        
    189.    
    190.        
    191.    
    192.     /** 
    193.      *@paramargs 
    194.      *@throwsMalformedURLException 
    195.      */  
    196.     publicstaticvoid main(String[] args) throws MalformedURLException {  
    197.           
    198.             //ClassLoaderUtil.getExtendResource("../spring/dao.xml");  
    199.         //ClassLoaderUtil.getExtendResource("../../../src/log4j.properties");  
    200.         ClassLoaderUtil.getExtendResource("log4j.properties");  
    201.           
    202.         System.out.println(ClassLoaderUtil.getClassLoader().getResource("log4j.properties").toString());  
    203.    
    204.     }  
    205.    
    206. }  
    207.    

    后记
    ClassLoaderUtil类的public static URL getExtendResource(String relativePath),虽然很简单,但是确实可以解决大问题。
    不过这个方法还是比较简陋的。我还想在未来有空时,进一步增强它的能力。比如,增加Ant风格的匹配符。用**代表多个目录,*代表多个字符,?代表一个字符。达到Spring那样的能力,一次返回多个资源的URL,进一步方便大家开发。
     
    总结:
    1,尽量不要使用相对于System.getProperty("user.dir")当前用户目录的相对路径。这是一颗定时炸弹,随时可能要你的命。
    2,尽量使用URI形式的绝对路径资源。它可以很容易的转变为URI,URL,File对象。
    3,尽量使用相对classpath的相对路径。不要使用绝对路径。使用上面ClassLoaderUtil类的public static URL getExtendResource(String relativePath)方法已经能够使用相对于classpath的相对路径定位所有位置的资源。
    4,绝对不要使用硬编码的绝对路径。因为,我们完全可以使用ClassLoader类的getResource("")方法得到当前classpath的绝对路径。
    使用硬编码的绝对路径是完全没有必要的!它一定会让你死的很难看!程序将无法移植!
    如果你一定要指定一个绝对路径,那么使用配置文件,也比硬编码要好得多!
    当然,我还是推荐你使用程序得到classpath的绝对路径来拼资源的绝对路径!

    展开全文
  • java.io.FileNotFoundException: \default\info\license\...今天下载项目下的文件,我给了相对路径,不对,报错了,文件找不到,下载都要给绝对路径。 request.getSession().getServletContext().getRealPath("");
  • java 下载文件

    2020-03-26 17:31:13
    java 下载文件1.知识点2.下载流程3.servlet代码4.其它5.演示详情6.建议 1.知识点 简单的io读写 请求头和响应头的一些配置 2.下载流程 1.获取请求参数和名称 获取文件名 2.找到该文件在服务器中的绝对路径 3.设置...
  • * 下载音乐文件到指定目录 * @param musicPath * @param musicName * @param singerName */ public void downloadMusic(final String musicPath, String musicName, String singerName )...
  • java实现下载文件

    万次阅读 2018-03-02 11:31:14
    通过java代码实现下载功能,代码如下:(输入流和输出流实现)public String download() { ...  String filedownload = 文件路径(绝对路径);  String filedisplay = 文件名称; filedisplay = URLEncode...
  • java下载文件

    2018-10-10 15:28:19
    //绝对文件路径文件目标路径 public static void downloadFile(String remoteFilePath, String localFilePath) { URL urlfile = null; HttpURLConnection httpUrl = null; BufferedInputStream bis = null; ...
  • 1、项目获取真实路径(下载文件使用)  获取当前站点目录的绝对路径:  request.getSession().getServletContext().getRealPath(String str);  其中参数str可以是文件或者文件夹名称。  2、如何在web项目...
  • 文件路径分为绝对路径和相对路径,在项目中页面跳转、配置文件读写、文件上传下载等等许多地方都涉及到文件路径问题。 一篇好文转载于此:http://blog.csdn.net/shendl/archive/2006/12/03/1427475.aspx Java...
  • java-使用response文件下载

    千次阅读 2019-07-03 16:33:54
    * 传入文件名,文件绝对路径 下载文件 * @param fileName * @param path * @param response * @throws FileNotFoundException * @throws IOException */ public static void downloaFile(String fileN...
  • Java从服务器下载文件到本地

    万次阅读 2017-09-08 17:21:59
    我的需求是从服务器端的某磁盘中获取amr文件,并下载。 首先传递的参数strUrl为物理路径,是绝对路径
  • 项目获取真实路径(下载文件使用) 获取当前站点目录的绝对路径: 方法: request.getRealPath(String str); 已经不建议使用,替代方法是: request.getSession().getServ...
  • Java后台Controller实现文件下载

    千次阅读 2019-08-20 17:37:55
    1.filePath:文件绝对路径(d:\download\a.xlsx) 2.fileName(a.xlsx) 3.编码格式(GBK) 4.response、request不介绍了,从控制器传入的http对象 代码片. //控制器 @RequestMapping(UrlConstants.BLACKLIST...
  • java浏览器下载文件

    2017-06-27 15:31:22
    我们可以一个绝对路径 再去请求后台方法 再通过流输出到页面。 贴代码: //下载附件 public void downLoadProcessFile(){ JSONObject params=super.getPageParams(); TrackDatakService.td.
  • java response 下载文件

    万次阅读 2012-08-08 17:08:09
    1:废话少说直接上源码:  File file = new File(rootPath+"files/... //要下载文件绝对路径  InputStream ins = new BufferedInputStream(new FileInputStream(rootPath+"files/summary/"+zipName));  byte
  • 使用java调用.m文件,但是调用的时候没有参数,.m文件中的脚本使用的参数是以数据文件的形式传递的,并且这个.m调用的父层文件夹的位置是根据客户安装软件的位置来设定的,在.m脚本文件中是无法得到父层目录文件的...
  • 今天尝试了一下通过flikr api将搜索到的图片保存到本地(其实其他文件也差不多是这样做),...//此为绝对路径 File file=new File("../workspace/后面省略")//此为相对路径 FileOutputStream out =n...
  • java web-文件下载

    2016-07-07 16:43:30
    @RequestMapping("/download") public String download(String uploadpath, HttpServletRequest request, HttpServletResponse response) throws Exception { // uploadpath是指欲下载文件...例如绝对路径是 /home/
  • Java开发中,往往我们需要读取配置文件,或者读写系统文件,读写下载文件等等操作,是不是有时遇到提示系统找不到指定路径的文件的错误, 由此,我今天整理一下,希望以后能避免这种错误的出现。 面对路径问题,...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 295
精华内容 118
关键字:

java绝对路径下载文件

java 订阅