`
xianbin
  • 浏览: 215172 次
  • 来自: ...
社区版块
存档分类
最新评论

Java路径问题解决方案汇集

阅读更多
最近查看了网上很多关于路径问题资料大概总结了一下:

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中是空格的getPath()返回的仍是空格,是“%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("/");

原文地址:http://www.oschina.net/code/snippet_727646_18340
分享到:
评论

相关推荐

    java学习网站

    - **简介**: 该资源库汇集了Java相关的开源项目和代码,帮助开发者快速找到所需的技术解决方案。 **4.4 FWVV** - **网址**: http://www.fwvv.net/Software/download-138-1.shtml - **简介**: 包含了大量的Java项目...

    Java技术大合集 真的是技术点的列子 很实用的

    通过阅读和实践这些示例,开发者可以加深对Java平台的理解,提高解决问题的能力。 "说明.htm"和"readme.txt"通常包含了合集的介绍、使用说明、注意事项等,可能为用户提供如何有效利用这个资源的指导。例如,它们...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《java jdk 7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。  《java jdk 7学习笔记》针对java se 7新功能全面改版,无论是...

    Java平台发展介绍.pdf

    Java平台自其诞生以来,一直扮演着软件开发领域的重要角色。作为No.1的编程语言,Java拥有超过1200万的开发者,且这...对于企业和开发者来说,理解并掌握Java平台的发展动态,对于把握技术趋势、优化解决方案至关重要。

    awesome-javaJava 开源项目集合

    2. **微服务**:随着微服务架构的普及,像Spring Cloud这样的微服务解决方案在awesome-java中也有收录。学习如何设计和实现微服务,理解服务发现、负载均衡、熔断和降级等概念,对于构建大型分布式系统至关重要。 3...

    剑指Offer题目Java实现代码

    - **回溯法**:在解决问题时尝试所有可能的路径,如八皇后问题、N皇后问题等。 - **图论算法**:如深度优先搜索(DFS)、广度优先搜索(BFS),在解决网络问题、社交网络分析等方面有重要作用。 3. **设计模式** ...

    java学习网站荟萃

    8. **[Java中文世界论坛](http://www.chinajavaworld.com/)**:该论坛聚集了许多Java开发者,大家在这里分享经验、解决问题,非常适合寻找具体问题解决方案的人士。 9. **[J道](http://www.jdon.com/)**:专注于...

    java学习的特别网站

    - **特色**:丰富的实践案例和解决方案,能够帮助开发者解决实际问题。 2. **Java2000** - <http://www.java2000.net/> - **简介**:专注于Java技术分享,涵盖Java基础、框架、数据库等多方面内容。 - **特色**...

    【藏宝图】(珍藏版)2012java开发工程师必备精品资料(115)

    #### 四、Java最佳图形解决方案JFreeChart入门 JFreeChart是一款功能强大的开源Java图表库,适用于创建高质量的图表。对于需要在Web应用或桌面应用中集成图表功能的开发者来说,这份资料提供了从入门到实践的全面...

    java技术文集

    10. **设计模式**:Java开发中常见的设计模式如单例、工厂、观察者、装饰器等,是解决常见问题的模板,也是面试常考内容。 11. **Java EE**:如果文集中包含这部分,那么将涉及Servlet、JSP、JDBC、EJB、Spring、...

    JAVA经典算法

    "JAVA经典算法"这个压缩包文件很可能是汇集了一些在实际开发中常见的、高效的算法实现,对于学习和提升编程技能非常有帮助。以下是对这些算法的详细介绍: 1. **排序算法**:包括快速排序、归并排序、冒泡排序、...

    Java 算法源码集合

    Java算法源码集合是一个汇集了各种经典算法实现的资源库,旨在帮助开发者加深对算法的理解,提高编程技能。源码中的实现可能来自网络上的不同来源,因此可能存在一些错误或不完善之处,但在学习和实践中,我们可以...

    java常用网址,可能已经过期了

    - **知识点**:这篇文章可能涉及Java编程中的某个具体问题及其解决方案。 2. **CodeCEO - Java 数组方法介绍** - [http://www.codeceo.com/article/10-java-array-method.html]...

    March-LeetCode-Challenge:此仓库包含Java中的March LeetCoding挑战解决方案

    本仓库聚焦于Java语言,汇集了2023年3月(March)的LeetCode挑战解决方案,旨在为Java开发者提供详尽的学习和参考资源。 在Java编程中,LeetCode挑战涵盖了数据结构、算法、设计模式等多方面内容。通过解决这些挑战...

    程序员从初级到高级知识汇集

    - **SSH整合**:Spring3 + Struts2 + Hibernate4 的整合是企业级应用开发中常见的技术栈,它提供了模型-视图-控制器(MVC)的完整解决方案。DWR(Direct Web Remoting)用于实现页面与服务器的实时交互,EXT则提供...

    LeetcodeDaily:LeetCode每日一题Java实现

    8. **位运算**:位运算在Java中具有较高的效率,对于某些特定问题,如数字操作、颜色编码等,使用位运算可以得到简洁且高效的解决方案。 通过这个名为"LeetcodeDaily-master"的压缩包,你可以获得一系列已经用Java...

    JavaEye论坛热点月报 总第8期

    - **关于Struts2中visitor校验器的解决方法**:针对Struts2框架的验证机制,特别是visitor校验器的使用方法和常见问题的解决方案。 3. **其他技术** - **g1安装Android软件详细攻略**:为Android开发者提供了...

    Leetcode:leetcode题解 Java版

    LeetCode 是一个在线平台,汇集了众多编程挑战题目,旨在帮助程序员提升算法技能和解决实际问题的能力。这个压缩包“Leetcode: leetcode题解 Java版”显然包含了使用Java语言解决LeetCode上算法问题的代码库。让我们...

    ITAT大赛历届决赛题

    9. **编程技巧**:包括代码优化、错误处理、输入输出格式控制等,这些都是实现高效解决方案的重要组成部分。 在Java编程方面,你需要熟悉其语法特性,如面向对象编程、异常处理、IO流、多线程、集合框架等。Java的...

Global site tag (gtag.js) - Google Analytics