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()http://www.huiyi8.com/jiaoben/网页特效代码 .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("/");

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-01 05:07:11

Java路径问题解决方案汇集的相关文章

linux下eclipse·java路径问题

问题描述 linux下eclipse·java路径问题 发行版 archlinuxeclipse版本4.4.2jdk版本java se1.8,java8-open-jdk后面测试了一下ubuntu/javase1.7也不行 学习时发现,需要的图片无法载入,开始以为是自己打错了,检查无果后拷贝来样版文件,依旧无法载入!怎么办?难道linux下路径的写法不一样?!「之前的音频文件倒是正常的,但图片却不行」求解附上模板http://pan.baidu.com/s/1o6tC18A文件在project

java路径问题,tomcat配置

问题描述 java路径问题,tomcat配置 Document base E:WorkspaceshrWebContent does not exist or is not a readable directory这个问题要怎么解决呀,拜求大神们 解决方案 试下switch工作空间或者新建一个workspaces看看,提示你找不到该文件夹

java路径问题

问题描述 使用java开发网站,页面都使用的模板,请问在java中如何实现的虚拟路径! 解决方案 解决方案二:不懂LZ的意思解决方案三:你说的虚拟路径就是我们在浏览器中访问页面的路径吧,用servlet当然是在web.xml文件中配置啊,如果struts2当然是struts.xml文件中配置.

java路径中的空格问题(转)

java路径中的空格问题 1. URLTest.class.getResource("/").getPath(); URLTest.class.getResource("/").getFile(); URLTest.class.getClassLoader().getResource("").getPath(); Thread.currentThread().getContextClassLoader().getResource("&q

基于获取JAVA路径,包括CLASSPATH外的路径的方法详解_java

归纳一些网上取JAVA路径的方法: 注明:如果从ANT启动程序,this.getClass().getResource("")取出来的比较怪,直接用JAVA命令行调试就可成功.得到classpath和当前类的绝对路径的一些方法获得CLASSPATH之外路径的方法:URL base = this.getClass().getResource(""): //先获得本类的所在位置,如/home/popeye/testjava/build/classes/net/ Stri

java路径片段-java中路径的片段参数提取

问题描述 java中路径的片段参数提取 请问在java中有什么方法能方便解析URL的片段吗?例如URL:http//:localhost:8080/appname/user/123/age?param1&param2,我要获得路径user后的参数123,要用什么方法?难道只能老老实实解析字符串? 解决方案 Java各种路径和参数 解决方案二: 非常感谢,依据你的方法我已经把路径中的参数提取出来了.只是还有一个疑惑,http//:localhost:8080/appname/user/{userI

求助:java路径覆盖率工具

问题描述 请问一下,谁知道java单元测试中,路径覆盖率工具有些什么呀找了好久都没有找到,大多是语句覆盖和分支覆盖的

container-executor.cfg文件及其各级父路径问题解决方案

一.背景       为了增加Hadoop CGroup来限制部分作业对CPU的占用,近日在搭建Hadoop-2.6.0的CGroup过程中,碰到了以下一个问题,提示如下(注:500为用户hadoop的id号): File /opt/hadoop/hadoop-2.6.0/etc/hadoop/container-executor.cfg must be owned by root, but is owned by 500       于是,就将container-executor.cfg文件的

java获得平台相关的行分隔符和java路径分隔符的方法_java

[问题] 不同系统平台下的行分隔符.路径分隔符等常常不同.如 复制代码 代码如下: 行分隔符在windows 下是 \r\n,在Linux下面是 \n, 在Mac下是 \r路径分隔符在windows下是 \ ,在LInux下是 / 如何在Java程序获取当前平台的分隔符,以及其他系统相关的状态呢? [实现] 复制代码 代码如下: import java.util.Properties; public class SeparatorUtils {     /* system properties