资源预览内容
第1页 / 共2页
第2页 / 共2页
亲,该文档总共2页全部预览完了,如果喜欢就下载吧!
资源描述
最近查看了网上很多关于路径问题资料大概总结了一下:Java路径中的空格问题1、URLTest.class.getResource(/).getPath();URLTest.class.getResource(/).getFile();URLTest.class.getClassLoader().getResource().getPath();Thread.currentThread().getContextClassLoader().getResource().getPath()等 多种相似方式获 得的路径,不能被FileReader()和FileWriter()直接应用,原因是URL对空格,特殊字符(,#, 等)和中文进行了编码处理。如果文件中URLTest.class.getResource(/).getPath()必须以/开头然 后再加文件名,而 URLTest.class.getClassLoader().getResource().getPath ()不用加/可以直接添 加文件名。路径中包含空格时,如果空格变为”20 ”有如下处理方法:1) 使用repaceAll(%20,)替换,但只能解决空格问题,如果路径中包含其他特殊字符和中文就 不能解决问题。2) 使用URLDecoder.decode(str,UTF-8解码,但是只能解决一部分,若路径中含有+,也是不能 解决的,原因是URL并不是完全用URLEncoder.encode(str,UTF-8编码的,+号被解码后,则变 成空格。3) 解决所有的问题,用 URLTest.class.getClassLoader().getResource().toURI().getPath();但是需要 处理URISyntaxException异常,比较麻烦一些。2、new URL();的参数可以为正确的URI,或者为URI格式的字符串;若字符串是非完整的URI 格式,则创建失败。java.net.URI返回的路径中的空格以“空格”的形式出现方法为 Thread.currentThread().getContextClassLoader().getResource().toURI().getPath ()但是 Thread.currentThread().getContextClassLoader().getResource().toURI().toString ()则会以“ 20的 形式出现。java.net.URL返回的一切路径中的空格都是以“20”的形式出现。URL/URI返回的路 径分隔符都是“/”(控制台输出”/”)。3、new File(String filePath);接受正确URI格式的参数和带空格”(非%20)的正确相对/绝对字 符串路径,否则即使给的路径是正确的也会出现找不到文件的异常。File返回的路径分隔符都 为“”(控制台输出),对于存在的文件返回的路径字符串,空格都以”空格”出现,而不存在的 路径new出的file, getPath ()返回的路径中的空格,仍是new File(String filePath)的参数中原 有的形式,即若filePath中是空格的getPat()返回的仍是空格,是“20”的仍是“20”File.toURI() 会将file的路径名中的“空格”转化为“20”,然后在路径前加protocol: file:/,而File.toURL() 只会在file路径 前简单的加上protocol: file:/,而不会将“空格”转化为“20”,原来的无论是 “空格”还是“20”都只会原样保留。实际使用中遇到的问题总结如下:1、相对路径(即相对于当前用户目录的相对路径)均可通过以下方式获得(不论是一般的java项 目还是 web 项目)String relativelyPath=System.getProperty(user.dir);对于一般的 java 项目中 的文件是相对于项目的根目录,而对于web项目中的文件路径,可能是服务器的某个路径,同 时不同的web服务器也不同(tomcat是相对于tomcat安装目录bin)。为此,个人认为,在web 项目中,最好不要使用“相对于当前用户目录的相对路径”。然而默认情况下,java.io包中的类 总是根据当前用户目录来分析相对路径名。此目录由系统属性user.dir指定,通常是Java虚 拟机的调用目录。这就是说,在使用java.io包中的类时,最好不要使用相对路径。否则,虽然 在SE程序中可能还算正常,但是到了 EE程序中,可能会出现问题。2、web项目根目录获取1) 建立一个servlet,在其init()方法中添加如下代码ServletContext context = this.getServletContext();String strs = context.getRealPath(/);2) 利用httpServletRequest,得到相应的项目路径String pathUrl = request.getSession().getServletContext().getRealPath(/);
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号