Java讀取resources目錄下文件路徑的九種代碼示例教程
前言
資源管理是開(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)文章
Spring3.1.1+MyBatis3.1.1的增、刪、查、改以及分頁(yè)和事務(wù)管理
這篇文章主要介紹了Spring3.1.1+MyBatis3.1.1的增、刪、查、改以及分頁(yè)和事務(wù)管理的相關(guān)資料,需要的朋友可以參考下2016-01-01mybatis中如何實(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-04SpringBoot項(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-06Spring?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)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05SparkStreaming整合Kafka過(guò)程詳解
這篇文章主要介紹了SparkStreaming整合Kafka過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01java中SpringBoot?自動(dòng)裝配的原理分析
這篇文章主要介紹了SpringBoot?自動(dòng)裝配的原理分析的相關(guān)資料,需要的朋友可以參考下2022-12-12