解决JAVA开发中遇到的路径问题,从而快速的从事其他工作任务
前期准备工作(包括相关工具或所使用的原料等)
JAVA JDK版本 jdk1.7.0_51
Eclipse加部分应用插件
windows 7 操作系统
Java路径特殊字符
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class URLTest {
public static void main(String[] args) {
String urlPath=URLTest.class.getResource("/").getPath();
System.out.println(urlPath);
urlPath=URLTest.class.getResource("/").getFile();
System.out.println(urlPath);
urlPath=URLTest.class.getClassLoader().getResource("").getPath();
System.out.println(urlPath);
urlPath= Thread.currentThread().getContextClassLoader().getResource("").getPath();
System.out.println(urlPath);
try {
FileWriter writer=new FileWriter("D:/test.txt");
writer.write("success\n");
writer.flush();
writer.close();
FileReader read=new FileReader("D:/test.txt");
int i=1;
while((i=read.read())!=-1)
{
System.out.print((char)i);
}
read.close();
/**下面读写报错 **/
read=new FileReader(urlPath);
writer=new FileWriter(urlPath);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述获取路径的方式不能被FileReader()和FileWriter()直接应用因为URL对空格、特殊字符(%,#,[]等)以及中文进行了编码处理;
必须以"/"开头来获取路径:URLTest.class.getResource("/").getPath();不用加"/"可以来获取路径:URLTest.class.getClassLoader().getResource("").getPath();
控制台输出如下图所示:
![Java路径问题解决方案:[1]基础篇](http://www.52ij.com/uploads/allimg/160402/22004V161-0.jpg)
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class URLTest {
public static void main(String[] args) {
String urlPath=URLTest.class.getResource("/").getPath();
System.out.println(urlPath);
try {
urlPath=urlPath.replaceAll("%20"," ")+ "URLTest.class";
FileReader read=new FileReader(urlPath);
int i=1;
while((i=read.read())!=-1)
{
System.out.print((char)i);
}
read.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
1、repaceAll("%20",' ')替换,只能解决空格问题,路径中包含其他特殊字符或者中文是不能够解决问题的;
2、URLDecoder.decode(str,"UTF-8")解码只能解决部分部分;如果路径中含有“+”是不能解决的,URL不是完全支持URLEncoder.encode(str,"UTF-8")编码的,如果转码“+”会变成"空格";
3、URLTest.class.getClassLoader().getResource("").toURI().getPath();可以解决目前存在的问题,但需处理URISyntaxException异常。
控制台输出如下图所示(虽然都是乱码):
![Java路径问题解决方案:[1]基础篇](http://www.52ij.com/uploads/allimg/160402/22004R549-1.jpg)
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
public class URLTest {
public static void main(String[] args) {
try {
URL url=new URL("file://E:/test.txt");
System.out.println(url);
URI uri=new URI("file://E:/test.txt");
System.out.println(uri);
String uriPath=Thread.currentThread().getContextClassLoader()
.getResource("").toURI().getPath();
System.out.println("以“空格”的形式显示" + uriPath);
uriPath=Thread.currentThread().getContextClassLoader()
.getResource("").toURI().toString();
System.out.println("以“%20”的形式显示" + uriPath);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}
new URL();的参数可以为正确的URI,或者为URI格式的字符串;若字符串是非完整的URI格式,则创建失败;
java.net.URI
以“%20”的形式显示Thread.currentThread().getContextClassLoader().getResource("").toURI().toString();
以“空格”的形式显示
Thread.currentThread().getContextClassLoader().getResource("").toURI().getPath();
java.net.URL返回的一切路径中的空格都是以“%20”的形式出现。URL/URI返回的路径分隔符都是“/”(控制台输出"/")
控制台输出如下图所示:
![Java路径问题解决方案:[1]基础篇](http://www.52ij.com/uploads/allimg/160402/22004V311-2.jpg)
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.net.URI;
public class URLTest {
public static void main(String[] args) {
File file=new File("D:/test.txt");
System.out.println(file.toURI());
System.out.println(file.toURI().getPath());
try {
FileReader reader=new FileReader(file);
System.out.println(reader);
/**接受正确URI格式的参数和带“空格”(非%20)的正确相对/绝对字符串路径**/
URI uri=file.toURI();
file=new File(uri.getPath());
reader=new FileReader(file);
System.out.println(reader);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
new File(String filePath);接受正确URI格式的参数和带“空格”(非%20)的正确相对/绝对字符串路径,否则会报找不到文件异常;
new File(String filePath);返回的路径都是以“\”分隔的,空格还是以"空格"形式显示;
new File(String filePath);是空格则getPath()返回的仍是空格,是“%20”的仍是“%20”,不会存在改变的问题;
new File(String filePath).toURI();会将file的路径名中的“空格”转化为“%20”,然后在路径前加“file:/”,new File(String filePath)..toURI().getPath();则会取掉“file:”。
控制台输出如下图所示:
![Java路径问题解决方案:[1]基础篇](http://www.52ij.com/uploads/allimg/160402/22004R937-3.jpg)
注意事项
路径上尽量避免出现特殊字符,文件最好都是以英文字母命名格式
Java路径问题解决方案(共2篇)下一篇:应用篇经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本教程系本人依照真实经历原创,未经许可,谢绝转载。- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
