我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java如何获取resources下的文件路径和创建临时文件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java如何获取resources下的文件路径和创建临时文件

获取resources下的文件路径和创建临时文件

之前处理根据模板文件,批量导入xxx.zip 的下载功能,用到这两个知识,就简单记录下,对于流的处理就跳过了      

由于maven项目打包会把 class="lazy" data-src/main/java 和 class="lazy" data-src/main/resources 下的文件放到 target/classes 下,所以统一以根路径代表此目录。

创建一个springboot项目

      

server:
  port: 80
  servlet:
    context-path: /JQ_Resource

获取resources下的文件路径

总结起来有两点:

1、Class.getResource()的获取资源路径

  • 如果以 / 开头,则从根路径开始搜索资源。
  • 如果不以 / 开头,则从当前类所在的路径开始搜索资源。

2、ClassLoader.getResource()的资源获取不能以 / 开头,统一从根路径开始搜索资源。

String path = this.getClass().getClassLoader().getResource("xxx").getPath();

测试:

    public void getResource() {
        //1、通过Class的getResource方法
        String a1 = RescourceController.class.getResource("/cn/jq/jqresource/pojo/User.class").getPath();
        String a2 = this.getClass().getResource("../pojo/User.class").getPath();
        String a3 = RescourceController.class.getResource("/static/a.txt").getPath();
        String a4 = this.getClass().getResource("../../../../static/a.txt").getPath();
        System.out.println(a1.equals(a2)); // true
        System.out.println(a4); // /D:/JQ/workspace/JQ_Resource/target/classes/static/a.txt
 
        // 2、通过本类的ClassLoader的getResource方法
        String b1 = RescourceController.class.getClassLoader().getResource("cn/jq/jqresource/pojo/User.class").getPath();
        String b2 = this.getClass().getClassLoader().getResource("static/a.txt").getPath();
        String b3 = this.getClass().getClassLoader().getResource("static/resource/jq.docx").getPath();
 
        // 3、通过ClassLoader的getSystemResource方法
        String c1 = ClassLoader.getSystemClassLoader().getResource("cn/jq/jqresource/pojo/User.class").getPath();
        String c2 = ClassLoader.getSystemClassLoader().getResource("static/a.txt").getPath();
        String c3 = ClassLoader.getSystemClassLoader().getResource("static/resource/jq.docx").getPath();
 
        // 4、通过ClassLoader的getSystemResource方法
        String d1 = ClassLoader.getSystemResource("cn/jq/jqresource/pojo/User.class").getPath();
        String d2 = ClassLoader.getSystemResource("static/a.txt").getPath();
        String d3 = ClassLoader.getSystemResource("static/resource/jq.docx").getPath();
 
        // 5、通过Thread方式的ClassLoader的getResource方法
        String e1 = Thread.currentThread().getContextClassLoader().getResource("cn/jq/jqresource/pojo/User.class").getPath();
        String e2 = Thread.currentThread().getContextClassLoader().getResource("static/a.txt").getPath();
        String e3 = Thread.currentThread().getContextClassLoader().getResource("static/resource/jq.docx").getPath();
    }

resources下创建临时文件

    public void createFile(HttpServletRequest request) throws IOException {
        String contextPath = request.getContextPath(); // /JQ_Resource
 
        String filePath = contextPath + "/temp/hr.zip";
        String dirPath = contextPath + "/temp/hr";
        File file = new File(filePath);
        File dir = new File(dirPath);
        if (file.exists()) {
            // 删除指定文件,不存在报异常
            FileUtils.forceDelete(file);
        }
        file.createNewFile();
 
 
        if (dir.isDirectory()) {
            // 清除该目录下的文件及子目录文件而不删除该目录文件夹。该目录不存在会报错
            FileUtils.cleanDirectory(dir);
        } else {
            dir.mkdirs();
        }
 
        File dir_File = new File(dirPath + "/" + "dir_file.txt");
 
        System.out.println(dir_File.getPath()); // \JQ_Resource\temp\hr\dir_file.txt
        System.out.println(file.exists()); // true
    }

Java获取文件路径及路径乱码问题

System.getProperty(“user.dir”)
  • 构造:File(path)
  • 构造:FileInputStream(“path”)
XXX.class.getResource("").getPath()

XXX.class.getClassLoader().getResource("").getPath()

(以下演示均为Windows系统)

相对路径:class="lazy" data-src/test/resources/test.txt

绝对路径:D:\glearning\my_opensource\somproject\class="lazy" data-src\main\resources\test\test.txt

  • “.”符号:java文件所在的当前目录(编译后是.class文件所在的当前目录)
  • “…”符号:java文件所在的上一级目录(编译后.class文件的上一级目录)
  • “/”符号:以/开头的,在URL类中表示项目的根路径(maven编译后就是target目录的位置)。
System.getProperty(“user.dir”)

表示当前用户目录,即jvm调用目录

File(path)与FileInputStream(path)

java获取项目路径中文乱码

解决方法

import java.io.UnsupportedEncodingException;  
import java.net.URI;  
import java.net.URL;  
import java.net.URLDecoder;  
  
public class Test01 {  
  
    public static void main(String[] args) {  
        getPathMethod01();  
        getPathMethod02();  
        getPathMethod03();  
        getPathMethod04();  
    }  
    private static String getPathMethod01(){  
        String p = System.getProperty("user.dir");  
        System.out.println("方法一路径:"+p);  
        //方法一路径:E:\test\test04练  习
        return p;  
    }  
      
    private static String getPathMethod02(){  
        URL url= Test01.class.getResource("");  
        String p = url.getPath();  
        System.out.println("方法二路径:"+p);  
		//方法二路径:/E:/test/test04%e7%bb%83%20%20%e4%b9%a0/bin/com/fei/
        try {  
            System.out.println("方法二解码路径:"+URLDecoder.decode(p, "UTF-8"));  
			//方法二解码路径:/E:/test/test04练  习/bin/com/fei/
        } catch (UnsupportedEncodingException e) {  
            e.printStackTrace();  
        }  
        return p;  
    }  
      
    private static String getPathMethod03(){  
        URL url= Test01.class.getResource("/");  
        String p = url.getPath();  
        System.out.println("方法三路径:"+p); 
		//方法三路径:/E:/test/test04%e7%bb%83%20%20%e4%b9%a0/bin/
        try {  
            System.out.println("方法三解码路径:"+URLDecoder.decode(p, "UTF-8"));  
			//方法三解码路径:/E:/test/test04练  习/bin/
        } catch (UnsupportedEncodingException e) {  
            e.printStackTrace();  
        }  
        return p;  
    }  
    private static String getPathMethod04(){  
        try {  
            URI uri = Test01.class.getResource("/").toURI();  
            String p = uri.getPath();  
            System.out.println("方法四路径:"+p);  
			//方法四路径:/E:/test/test04练  习/bin/
            return p;  
        } catch (Exception e) {  
            e.printStackTrace();  
            throw new RuntimeException(e);  
        }  
    }  
}  

通过看代码和运行结果可以看到,用url.getPath()获取到的路径被utf-8编码了,用URLDecoder.decode(p, “UTF-8”)即可解码。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java如何获取resources下的文件路径和创建临时文件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java如何获取resources下的文件路径和创建临时文件

这篇文章主要介绍了Java如何获取resources下的文件路径和创建临时文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-29

java如何获取resources下的文件

在Java中,可以使用`ClassLoader`类来获取`resources`下的文件。具体步骤如下:1. 创建`ClassLoader`对象```ClassLoader classLoader = getClass().getClassL
2023-09-28

java如何获取文件路径

第一种:File f = new File(this.getClass().getResource("/").getPath());System.out.println(f);结果: C:Documents%20and%20SettingsAdministra
java如何获取文件路径
2022-04-18

JAVA文件中如何获取路径

这篇文章主要介绍了JAVA文件中如何获取路径,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 基本概念的理解`绝对路径`:你应用上的文件或目录在硬盘上真正的路径,如:URL
2023-05-30

java如何获取指定文件路径

在Java中,要获取指定文件的路径,可以使用java.nio.file.Path类来完成。可以使用以下几种方法来获取文件路径:1. 使用Paths.get(String first, String... more)方法创建一个文件路径对象:
2023-10-21

Java怎么实现读取resources目录下的文件路径

本篇内容主要讲解“Java怎么实现读取resources目录下的文件路径”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么实现读取resources目录下的文件路径”吧!打印文件的方法如
2023-06-29

java怎么获取指定路径下的文件

在Java中,可以使用File类来获取指定路径下的文件。以下是获取指定路径下的文件的示例代码:import java.io.File;public class Main {public static void main(String[]
java怎么获取指定路径下的文件
2024-02-29

shell如何获取一个文件的路径

可以使用pwd命令来获取当前工作目录的路径,然后再加上文件的相对路径或绝对路径来获取文件的完整路径。例如,假设文件名为example.txt,在当前工作目录下,可以使用以下命令来获取文件的完整路径:pwd这将输出当前工作目录的路径,例如
shell如何获取一个文件的路径
2024-03-06

Java读取resources中资源文件路径以及jar中文件无法读取如何解决

今天小编给大家分享的是Java读取resources中资源文件路径以及jar中文件无法读取如何解决,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。Java读取resources中资源文
2023-07-06

Word如何创建临时文件的说明

在Word中,您可以使用VBA(Visual Basic for Applications)编程语言来创建临时文件。以下是一种创建临时文件的示例代码:1. 打开Word并按下Alt + F11打开Visual Basic编辑器。2. 在左侧
2023-09-07

如何从DialogBoxIndirectParam()获取完整的文件路径

要从DialogBoxIndirectParam()函数中获取完整的文件路径,您需要按照以下步骤进行操作:1. 在对话框模板中添加一个编辑框控件,用于接收文件路径输入。2. 定义一个全局变量或缓冲区,用于存储文件路径。3. 在对话框过程函数
2023-09-26

Java如何实现动态获取文件的绝对路径

本文小编为大家详细介绍“Java如何实现动态获取文件的绝对路径”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java如何实现动态获取文件的绝对路径”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言我们知道在 J
2023-07-05

java创建文件时找不到指定路径的原因

创建文件时,提示找不到指定的路径,那是因为没有创建目录导致的。 (推荐:java视频教程)比如创建一个文件: File file = new File(“C:/test.txt”); file.createNewFile();这样是正确的,不会出现任何错去异常
java创建文件时找不到指定路径的原因
2016-02-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录