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("/");

时间: 2024-10-22 16:48:46

java路径中的空格问题(转)的相关文章

Tomcat下获取当前类的路径中含有空格的解决方案

web项目发布到Tomcat之后,如果tomcat是安装在比如 C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\**** 那么你获取当前类的路径的时候,就会出现问题,因为它会报出%20 C:\Program%20Files\Apache%20Software%20Foundation\Tomcat 6.0\webapps\**** 这个时候你再做一些关于文件的操作,程序就挂了,报一些未知错误,那么解决方案就是使用字符串

Java路径问题解决方案汇集

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

解决android 下载时文件名中文和空格问题

如果不对连接进行处理 下载就会报错 要想解决这个问题 只需对你的url 进行编码然后替换空格用编码表示 //对路径进行编码 然后替换路径中所有空格 编码之后空格变成"+"而空格的编码表示是"%20" 所以将所有的"+"替换成"%20"就可以了 url = URLEncoder.encode(urlStr,"utf-8").replaceAll("+", "%20");

android 下载时文件名是中文和空格会报错解决方案_Android

项目中遇到了下载文件文件名是中文而且还有空格如果不对连接进行处理下载就会报错要想解决这个问题只需对你的url 进行编码然后替换空格用编码表示 复制代码 代码如下: //对路径进行编码 然后替换路径中所有空格 编码之后空格变成"+"而空格的编码表示是"%20" 所以将所有的"+"替换成"%20"就可以了 复制代码 代码如下: url = URLEncoder.encode(urlStr,"utf-8").re

PowerShell命令中包含空格如何运行?_PowerShell

在PowerShell中,可以直接运行命令.包括.exe结尾的..com结尾的可执行程序,包括.bat结尾的..cmd结尾的批处理程序,还有.vbs结尾的..ps1结尾的脚本程序.均可以使用如下方式运行程序: <程序文件名>.<后缀> [参数列表] 但是请注意,这里的<程序文件名>其实是指的一个路径,可以是相对的,也可以是绝对的.当我们使用绝对路径的时候,会遇到路径中带空格的情况,像上面那种去执行它,就会报错了. 那么,如何运行带空格的命令呢? 答案是用引号!双引号.单

android 下载时文件名是中文和空格会报错解决方案

项目中遇到了下载文件文件名是中文而且还有空格如果不对连接进行处理下载就会报错要想解决这个问题只需对你的url 进行编码然后替换空格用编码表示 复制代码 代码如下: //对路径进行编码 然后替换路径中所有空格 编码之后空格变成"+"而空格的编码表示是"%20" 所以将所有的"+"替换成"%20"就可以了 复制代码 代码如下: url = URLEncoder.encode(urlStr,"utf-8").re

Java中去除字符串中所有空格的几种方法

JAVA中去掉空格 1. String.trim() trim()是去掉首尾空格 2.str.replace(" ", ""); 去掉所有空格,包括首尾.中间 复制代码 代码如下: String str = " hell o "; String str2 = str.replaceAll(" ", ""); System.out.println(str2); 3.或者replaceAll(" +&

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 web-上传的压缩文件,怎么复制到指定路径中。

问题描述 上传的压缩文件,怎么复制到指定路径中. FileUtil.copyFile 这个方法是复制文件的?我想把怎个ZIP包复制到指定路径要怎么做? 解决方案 如下:file1是上传的文件,file2是要复制的文件,path是路径.//文件1 File file1:File file2=new File(path); //复制文件 copy one file into another FileUtils.copyFile(file1 file2); 解决方案二: 没人知道你这个FileUtil