欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java讀取resources目錄下文件路徑的九種代碼示例教程

 更新時(shí)間:2024年07月19日 09:47:39   作者:程序員洲洲  
在Java開(kāi)發(fā)中經(jīng)常需要讀取項(xiàng)目中resources目錄下的文件或獲取資源路徑,這篇文章主要給大家介紹了關(guān)于Java讀取resources目錄下文件路徑的九種代碼示例教程,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

資源管理是開(kāi)發(fā)過(guò)程中不可或缺的一部分。資源文件,如配置文件、圖片和文本文件,通常被放置在項(xiàng)目的resources目錄下,以便于管理和訪問(wèn)。然而,對(duì)于初學(xué)者來(lái)說(shuō),如何正確地讀取這些文件路徑可能會(huì)遇到一些困惑。本文將深入探討Java中讀取resources目錄下文件路徑的幾種常見(jiàn)方法,幫助開(kāi)發(fā)者更有效地管理項(xiàng)目資源,并確保應(yīng)用程序的健壯性和可維護(hù)性。

代碼一:根據(jù)文件路徑讀取文件內(nèi)容

    /**
     * 根據(jù)文件路徑讀取文件內(nèi)容
     * @param fileInPath
     * @throws IOException
     */
    public static void getFileContent(Object fileInPath) throws IOException {
        BufferedReader br = null;
        if (fileInPath == null) {
            return;
        }
        if (fileInPath instanceof String) {
            br = new BufferedReader(new FileReader(new File((String) fileInPath)));
        } else if (fileInPath instanceof InputStream) {
            br = new BufferedReader(new InputStreamReader((InputStream) fileInPath));
        }
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
    }

代碼二:使用getResource和getPath方法

這里的getResource(“”)里面是空字符串

    public void function1(String fileName) throws IOException {
        String path = this.getClass().getClassLoader().getResource("").getPath();
        //注意getResource("")里面是空字符串
        System.out.println(path);
        String filePath = path + fileName;
        System.out.println(filePath);
        getFileContent(filePath);
    }

代碼三:使用getResource和getPath方法

直接通過(guò)getResource(fileName)方法獲取文件路徑,如果路徑中帶有中文要使用URLDecoder.decode進(jìn)行解碼。

    /**
     * 直接通過(guò)文件名getPath來(lái)獲取路徑
     * @param fileName
     * @throws IOException
     */
    public void function2(String fileName) throws IOException {
        String path = this.getClass().getClassLoader().getResource(fileName).getPath();//注意getResource("")里面是空字符串
        System.out.println(path);
        String filePath = URLDecoder.decode(path, "UTF-8");//如果路徑中帶有中文會(huì)被URLEncoder,因此這里需要解碼
        System.out.println(filePath);
        getFileContent(filePath);
    }

代碼四:通過(guò)文件名+getFile()來(lái)獲取文件

文件路徑的話getFile和getPath效果是一樣的,如果是URL路徑的話getPath是帶有參數(shù)的路徑。如下所示:

url.getFile()=/pub/files/foobar.txt?id=zhouzhou
url.getPath()=/pub/files/foobar.txt

使用getFile()方式獲取文件的代碼如下:

    /**
     * 直接通過(guò)文件名+getFile()來(lái)獲取
     * @param fileName
     * @throws IOException
     */
    public void function3(String fileName) throws IOException {
        String path = this.getClass().getClassLoader().getResource(fileName).getFile();//注意getResource("")里面是空字符串
        System.out.println(path);
        String filePath = URLDecoder.decode(path, "UTF-8");//如果路徑中帶有中文會(huì)被URLEncoder,因此這里需要解碼
        System.out.println(filePath);
        getFileContent(filePath);
    }

代碼五:使用getResourceAsStream方法獲取流(無(wú)需文件路徑)

SpringBoot中所有文件都在jar包中,沒(méi)有一個(gè)實(shí)際的路徑,因此可以使用以下方式。

    /**
     * 直接使用getResourceAsStream方法獲取流
     * springboot項(xiàng)目中需要使用此種方法,因?yàn)閖ar包中沒(méi)有一個(gè)實(shí)際的路徑存放文件
     * @param fileName
     * @throws IOException
     */
    public void function4(String fileName) throws IOException {
        InputStream in = this.getClass().getClassLoader().getResourceAsStream(fileName);
        getFileContent(in);
    }

使用getResourceAsStream方法獲取流,不使用getClassLoader可以使用getResourceAsStream(“/配置測(cè)試.txt”)直接從resources根路徑下獲取,SpringBoot中所有文件都在jar包中,沒(méi)有一個(gè)實(shí)際的路徑,因此可以使用以下方式。

    /**
     * 直接使用getResourceAsStream方法獲取流
     * 如果不使用getClassLoader,可以使用getResourceAsStream("/配置測(cè)試.txt")直接從resources根路徑下獲取
     * @param fileName
     * @throws IOException
     */
    public void function5(String fileName) throws IOException {
        InputStream in = this.getClass().getResourceAsStream("/" + fileName);
        getFileContent(in);
    }

代碼六:通過(guò)ClassPathResource類獲取文件流

    /**
     * 通過(guò)ClassPathResource類獲取,建議SpringBoot中使用
     * springboot項(xiàng)目中需要使用此種方法,因?yàn)閖ar包中沒(méi)有一個(gè)實(shí)際的路徑存放文件
     * @param fileName
     * @throws IOException
     */
    public void function6(String fileName) throws IOException {
        ClassPathResource classPathResource = new ClassPathResource(fileName);
        InputStream inputStream = classPathResource.getInputStream();
        getFileContent(inputStream);
    }

代碼七:通過(guò)絕對(duì)路徑獲取項(xiàng)目中文件的位置

    /**
     * 通過(guò)絕對(duì)路徑獲取項(xiàng)目中文件的位置(不能用于服務(wù)器)
     * @param fileName
     * @throws IOException
     */
    public void function7(String fileName) throws IOException {
        String rootPath = System.getProperty("user.dir");//E:\WorkSpace\Git\spring-framework-learning-example
        String filePath = rootPath + "\\chapter-2-springmvc-quickstart\\src\\main\\resources\\"+fileName;
        getFileContent(filePath);
    }

代碼八:new File(“”)獲取當(dāng)前的絕對(duì)路徑

    /**
     * 通過(guò)絕對(duì)路徑獲取項(xiàng)目中文件的位置(不能用于服務(wù)器)
     * @param fileName
     * @throws IOException
     */
    public void function8(String fileName) throws IOException {
        //參數(shù)為空
        File directory = new File("");
        //規(guī)范路徑:getCanonicalPath() 方法返回絕對(duì)路徑,會(huì)把 ..\ 、.\ 這樣的符號(hào)解析掉
        String rootCanonicalPath = directory.getCanonicalPath();
        //絕對(duì)路徑:getAbsolutePath() 方法返回文件的絕對(duì)路徑,如果構(gòu)造的時(shí)候是全路徑就直接返回全路徑,如果構(gòu)造時(shí)是相對(duì)路徑,就返回當(dāng)前目錄的路徑 + 構(gòu)造 File 對(duì)象時(shí)的路徑
        String rootAbsolutePath =directory.getAbsolutePath();
        System.out.println(rootCanonicalPath);
        System.out.println(rootAbsolutePath);
        String filePath = rootCanonicalPath + "\\chapter-2-springmvc-quickstart\\src\\main\\resources\\"+fileName;
        getFileContent(filePath);
    }

代碼九:設(shè)置環(huán)境變量

主要是通過(guò)設(shè)置環(huán)境變量,將文件放在環(huán)境變量中,原理也是通過(guò)絕對(duì)路徑獲取。

設(shè)置一個(gè)環(huán)境變量:TEST_ROOT=D:\WorkSpace\Git\spring-framework-learning-example

 System.getenv("TEST_ROOT");
 System.getProperty("TEST_ROOT")

通過(guò)設(shè)置環(huán)境變量的方式,然后通過(guò)絕對(duì)路徑獲取文件

    /**
     * 通過(guò)絕對(duì)路徑獲取項(xiàng)目中文件的位置
     * @param fileName
     * @throws IOException
     */
    public void function9(String fileName) throws IOException {
        System.setProperty("TEST_ROOT","E:\\WorkSpace\\Git\\spring-framework-learning-example");
        //參數(shù)為空
        String rootPath = System.getProperty("TEST_ROOT");
        System.out.println(rootPath);
        String filePath = rootPath + "\\chapter-2-springmvc-quickstart\\src\\main\\resources\\"+fileName;
        getFileContent(filePath);
    }

總結(jié)

到此這篇關(guān)于Java讀取resources目錄下文件路徑的九種代碼示例的文章就介紹到這了,更多相關(guān)Java讀取resources目錄下文件路徑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java編程是做什么的

    java編程是做什么的

    在本篇文章里小編給大家整理的是一篇關(guān)于java編程是什么相關(guān)的基礎(chǔ)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以閱讀下。
    2021-01-01
  • Spring3.1.1+MyBatis3.1.1的增、刪、查、改以及分頁(yè)和事務(wù)管理

    Spring3.1.1+MyBatis3.1.1的增、刪、查、改以及分頁(yè)和事務(wù)管理

    這篇文章主要介紹了Spring3.1.1+MyBatis3.1.1的增、刪、查、改以及分頁(yè)和事務(wù)管理的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • mybatis中如何實(shí)現(xiàn)一個(gè)標(biāo)簽執(zhí)行多個(gè)sql語(yǔ)句

    mybatis中如何實(shí)現(xiàn)一個(gè)標(biāo)簽執(zhí)行多個(gè)sql語(yǔ)句

    這篇文章主要介紹了mybatis中如何實(shí)現(xiàn)一個(gè)標(biāo)簽執(zhí)行多個(gè)sql語(yǔ)句問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • SpringBoot項(xiàng)目部署到阿里云服務(wù)器的實(shí)現(xiàn)步驟

    SpringBoot項(xiàng)目部署到阿里云服務(wù)器的實(shí)現(xiàn)步驟

    本文主要介紹了SpringBoot項(xiàng)目部署到阿里云服務(wù)器的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Spring?Kafka中如何通過(guò)參數(shù)配置解決超時(shí)問(wèn)題詳解

    Spring?Kafka中如何通過(guò)參數(shù)配置解決超時(shí)問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于Spring?Kafka中如何通過(guò)參數(shù)配置解決超時(shí)問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • 關(guān)于Java中的mysql時(shí)區(qū)問(wèn)題詳解

    關(guān)于Java中的mysql時(shí)區(qū)問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于Java中mysql時(shí)區(qū)問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 深度剖析Java中的內(nèi)存原型及工作原理

    深度剖析Java中的內(nèi)存原型及工作原理

    這篇文章主要介紹了深度剖析Java中的內(nèi)存原型及工作原理,本文講解了java虛擬機(jī)內(nèi)存原型、常量池、Java內(nèi)存分配中的棧、Java內(nèi)存分配中的堆等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • SparkStreaming整合Kafka過(guò)程詳解

    SparkStreaming整合Kafka過(guò)程詳解

    這篇文章主要介紹了SparkStreaming整合Kafka過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-01-01
  • RocketMQ事務(wù)消息機(jī)制詳解

    RocketMQ事務(wù)消息機(jī)制詳解

    這篇文章主要介紹了RocketMQ事務(wù)消息機(jī)制詳解,RocketMQ服務(wù)端將消息持久化之后,向發(fā)送方返回Ack確認(rèn)消息已經(jīng)發(fā)送成功,由于消息為半事務(wù)消息,在未收到生產(chǎn)者對(duì)該消息的二次確認(rèn)前,此消息被標(biāo)記成"暫不能投遞"狀態(tài),需要的朋友可以參考下
    2024-01-01
  • java中SpringBoot?自動(dòng)裝配的原理分析

    java中SpringBoot?自動(dòng)裝配的原理分析

    這篇文章主要介紹了SpringBoot?自動(dòng)裝配的原理分析的相關(guān)資料,需要的朋友可以參考下
    2022-12-12

最新評(píng)論