最近查看了网上很多关于路径问题资料大概总结了一下:
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("/");
分享到:
相关推荐
- **简介**: 该资源库汇集了Java相关的开源项目和代码,帮助开发者快速找到所需的技术解决方案。 **4.4 FWVV** - **网址**: http://www.fwvv.net/Software/download-138-1.shtml - **简介**: 包含了大量的Java项目...
通过阅读和实践这些示例,开发者可以加深对Java平台的理解,提高解决问题的能力。 "说明.htm"和"readme.txt"通常包含了合集的介绍、使用说明、注意事项等,可能为用户提供如何有效利用这个资源的指导。例如,它们...
《java jdk 7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。 《java jdk 7学习笔记》针对java se 7新功能全面改版,无论是...
Java平台自其诞生以来,一直扮演着软件开发领域的重要角色。作为No.1的编程语言,Java拥有超过1200万的开发者,且这...对于企业和开发者来说,理解并掌握Java平台的发展动态,对于把握技术趋势、优化解决方案至关重要。
2. **微服务**:随着微服务架构的普及,像Spring Cloud这样的微服务解决方案在awesome-java中也有收录。学习如何设计和实现微服务,理解服务发现、负载均衡、熔断和降级等概念,对于构建大型分布式系统至关重要。 3...
- **回溯法**:在解决问题时尝试所有可能的路径,如八皇后问题、N皇后问题等。 - **图论算法**:如深度优先搜索(DFS)、广度优先搜索(BFS),在解决网络问题、社交网络分析等方面有重要作用。 3. **设计模式** ...
8. **[Java中文世界论坛](http://www.chinajavaworld.com/)**:该论坛聚集了许多Java开发者,大家在这里分享经验、解决问题,非常适合寻找具体问题解决方案的人士。 9. **[J道](http://www.jdon.com/)**:专注于...
- **特色**:丰富的实践案例和解决方案,能够帮助开发者解决实际问题。 2. **Java2000** - <http://www.java2000.net/> - **简介**:专注于Java技术分享,涵盖Java基础、框架、数据库等多方面内容。 - **特色**...
#### 四、Java最佳图形解决方案JFreeChart入门 JFreeChart是一款功能强大的开源Java图表库,适用于创建高质量的图表。对于需要在Web应用或桌面应用中集成图表功能的开发者来说,这份资料提供了从入门到实践的全面...
10. **设计模式**:Java开发中常见的设计模式如单例、工厂、观察者、装饰器等,是解决常见问题的模板,也是面试常考内容。 11. **Java EE**:如果文集中包含这部分,那么将涉及Servlet、JSP、JDBC、EJB、Spring、...
"JAVA经典算法"这个压缩包文件很可能是汇集了一些在实际开发中常见的、高效的算法实现,对于学习和提升编程技能非常有帮助。以下是对这些算法的详细介绍: 1. **排序算法**:包括快速排序、归并排序、冒泡排序、...
Java算法源码集合是一个汇集了各种经典算法实现的资源库,旨在帮助开发者加深对算法的理解,提高编程技能。源码中的实现可能来自网络上的不同来源,因此可能存在一些错误或不完善之处,但在学习和实践中,我们可以...
- **知识点**:这篇文章可能涉及Java编程中的某个具体问题及其解决方案。 2. **CodeCEO - Java 数组方法介绍** - [http://www.codeceo.com/article/10-java-array-method.html]...
本仓库聚焦于Java语言,汇集了2023年3月(March)的LeetCode挑战解决方案,旨在为Java开发者提供详尽的学习和参考资源。 在Java编程中,LeetCode挑战涵盖了数据结构、算法、设计模式等多方面内容。通过解决这些挑战...
- **SSH整合**:Spring3 + Struts2 + Hibernate4 的整合是企业级应用开发中常见的技术栈,它提供了模型-视图-控制器(MVC)的完整解决方案。DWR(Direct Web Remoting)用于实现页面与服务器的实时交互,EXT则提供...
8. **位运算**:位运算在Java中具有较高的效率,对于某些特定问题,如数字操作、颜色编码等,使用位运算可以得到简洁且高效的解决方案。 通过这个名为"LeetcodeDaily-master"的压缩包,你可以获得一系列已经用Java...
- **关于Struts2中visitor校验器的解决方法**:针对Struts2框架的验证机制,特别是visitor校验器的使用方法和常见问题的解决方案。 3. **其他技术** - **g1安装Android软件详细攻略**:为Android开发者提供了...
LeetCode 是一个在线平台,汇集了众多编程挑战题目,旨在帮助程序员提升算法技能和解决实际问题的能力。这个压缩包“Leetcode: leetcode题解 Java版”显然包含了使用Java语言解决LeetCode上算法问题的代码库。让我们...
9. **编程技巧**:包括代码优化、错误处理、输入输出格式控制等,这些都是实现高效解决方案的重要组成部分。 在Java编程方面,你需要熟悉其语法特性,如面向对象编程、异常处理、IO流、多线程、集合框架等。Java的...