Java路径问题解决方案:[1]基础篇

2025-10-27 16:13:37

解决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]基础篇

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]基础篇

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]基础篇

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]基础篇

注意事项

路径上尽量避免出现特殊字符,文件最好都是以英文字母命名格式

(共篇)下一篇:
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢