Java中读取文件路径总结

本文介绍五种在Java中处理图片路径的方法,包括手动输入绝对路径、相对路径、自动获取绝对路径、通过ClassLoader类获取及通过流文件读取。每种方法都提供了详细的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过这些天的学习,文件路径这个问题经常让人头疼,下面我就总结了我用过的方法:
1.自己手动输入绝对路径地址(代码块里面有详细注释)

在主函数里面测试代码如下:

BufferedImage bufImg; // 实例化BufferedImage类,检测图片是否读取成功

        /**
         * 读取的第一种方式,自己手写绝对路径 检测图片是在java编译后的文件夹,所以文件路径为 C:\Program
         * Files\workspace\SecurityCodeRecognition\bin\image
         */
        /*
         * 注意事项:1.盘符大小写都是可以的 2.反斜杠必须要使用转义字符,也就是\\ 3.路径字符有空格也是可以的
         * 4.正斜杠不需要转义字符,并且用正斜杠写的时候,地址字符串开始的那个"/"可加可不加
         */
        bufImg = ImageIO.read(new File("C:\\Program Files\\workspace\\SecurityCodeRecognition\\bin\\image\\0.gif"));
        System.out.println("第一种方式的读取(反斜杠):图片的宽度为" + bufImg.getWidth());
        // 输出结果为: 第一种方式的读取(反斜杠):图片的宽度为9
        bufImg = ImageIO.read(new File("/C:/Program Files/workspace/SecurityCodeRecognition/bin/image/0.gif"));
        System.out.println("第一种方式的读取(正斜杠):图片的宽度为" + bufImg.getWidth());
        // 输出结果为:第一种方式的读取(正斜杠):图片的宽度为9

2.手写相对路径

/**
         * 读取的第二种方式,自己手写相对路径 检测图片为本项目的文件夹下(未编译),文件路径为:C:\Program
         * Files\workspace\SecurityCodeRecognition\source\image
         */
        /*
         * 注意事项:1.一个"."表示当前工程项目的文件目录 2.反斜杠必须要使用转义字符,也就是\\ 3.同样,正斜杠反斜杠都是可以的
         * 4.SecurityCodeRecognition为本项目的名称
         */
        bufImg = ImageIO.read(new File(".\\source\\image\\0.gif"));
        System.out.println("第二种方式的读取(反斜杠):图片的宽度为" + bufImg.getWidth());
        // 输出结果为:第二种方式的读取(反斜杠):图片的宽度为9
        bufImg = ImageIO.read(new File("./source/image/0.gif"));
        System.out.println("第二种方式的读取(正斜杠):图片的宽度为" + bufImg.getWidth());
        // 输出结果为:第二种方式的读取(正斜杠):图片的宽度为9

3.自动获取绝对路径

/**
         * 读取的第三种方式,自动获取绝对路径 这种方法针对的是编译好的bin文件夹的文件,也就是打包后图片路径
         * 检测图片是在java编译后的文件夹,所以文件路径为 C:\Program
         * Files\workspace\SecurityCodeRecognition\bin\image
         */
        String path = "/image/0.gif"; // 自己输入资源文件相对于bin文件夹的路径,"/"表示bin根目录,也就是打包后的根目录
        String p1 = PathTest.class.getResource(path).getFile(); // 获取根据相对路径得到的绝对路径的地址
        System.out.println("直接获取绝对路径:" + p1);// 获取并输出"0.gif"文件的绝对地址
        // 输出结果为:直接获取绝对路径:/C:/Program%20Files/workspace/SecurityCodeRecognition/bin/image/0.gif
        // 可以看出结果为正斜杠,和我们手写的差距不大,但是这个地址还不能用,下面再说

        File f = new File(PathTest.class.getResource(path).getFile()); // 获取改路径的文件
        String p2 = f.getAbsolutePath(); // 获取它的绝对路径
        System.out.println("间接获取的结果为:" + p2); // 输出它的绝对路径
        // 结果为:间接获取的结果为:C:\Program%20Files\workspace\SecurityCodeRecognition\bin\image\0.gif
        // 这时候获取的路径为反斜杠
        // 下面测试上面获取的路径

        // bufImg= ImageIO.read(new
        // File(p));直接这样读取是不可以的,会报错,原因在于获取的路径有%20,也就是空格字符串,要去掉他
        // 所以还要对字符串处理一下,因为编码方式的原因
        p1 = URLDecoder.decode(p1, "UTF-8"); // 对字符串进行重新编码(这一步很关键)
        System.out.println("处理后的结果为:" + p1);
        // 输出结果为:处理后的结果为:/C:/Program
        // Files/workspace/SecurityCodeRecognition/bin/image/0.gif
        bufImg = ImageIO.read(new File(p1));
        System.out.println("字符串处理后的结果(正斜杠):图片的宽度为:" + bufImg.getWidth());
        // 这时候可以正常读取,结果为:字符串处理后的结果(正斜杠):图片的宽度为:9

        p2 = URLDecoder.decode(p2, "UTF-8"); // 对字符串进行重新编码
        System.out.println("处理后的结果为(反斜杠):" + p2);
        // 输出结果为:处理后的结果为(反斜杠):C:\Program
        // Files\workspace\SecurityCodeRecognition\bin\image\0.gif
        bufImg = ImageIO.read(new File(p2));
        System.out.println("字符串处理后的结果:图片的宽度为:" + bufImg.getWidth());
        // 这时候可以正常读取,结果为:字符串处理后的结果:图片的宽度为:9

4.通过ClassLoader类来获取,和上一种方法大同小异

/**
         * 读取的第四中方法,通过ClassLoader类来获取,和上一种方法大同小异
         */
        // 使用ClassLoader类
        PathTest p=new PathTest();
        URL fileURL =p.getClass().getResource("/image/0.gif");
        System.out.println("获取的地址为:"+fileURL.getFile());
        //输出结果为:获取的地址为:/C:/Program%20Files/workspace/SecurityCodeRecognition/bin/image/0.gif

5.通过流文件来读取

/**
         * 读取文件的第五种方法(这是读取文件),针对于打包好的jar文件的一种操作
         */
        InputStream is = p.getClass().getResourceAsStream("/image/0.gif"); //通过该方法可以得到0.gif的文件流,
        //下面是利用is文件流将该流保存为文件的操作,自己可定义路径
        byte[] bs = new byte[1024]; //设置1k的流缓冲
        int len;// 读取到的数据长度
        OutputStream os = new FileOutputStream("d:/0.gif"); // 新建输出文件,文件路径自己设置,为绝对路径
        while ((len = is.read(bs)) != -1) {
            os.write(bs, 0, len); // 将输出流写到文件
        }

以上代码均在主函数里面测试通过,文件路径可自己更改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值