文件加载路径问题
? 项目中常常需要加载资源文件或者进行文件读写操作,许多人都会遇到文件找不到的问题,很多情况下这是因为路径不对产生的。以下是我总结的解决办法,不足之处,请指正。
? 工程目录结构如下:
FilePathDemo
?--/src
?? --/com.filepathdemo.test
????? FilePathDemo.java
????? test.txt
?? --/test.txt
?
test.txt(com.filepathdemo.test中)?
package com.filepathdemo.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;public class FilePathDemo {/** * @param args * @throws IOException */public static void main(String[] args) throws IOException {BufferedReader br = null;String line = null;// 加载当前类所在包中文件InputStream istream1 = FilePathDemo.class.getResourceAsStream("test.txt");// outputbr = new BufferedReader(new InputStreamReader(istream1, "UTF-8"));while ((line = br.readLine()) != null) {System.out.println(line);}if (br != null) {br.close();}// 加载工程根目录(src)下文件InputStream istream2 = getResourceAsStream("test.txt");// outputbr = new BufferedReader(new InputStreamReader(istream2, "UTF-8"));line = null;while ((line = br.readLine()) != null) {System.out.println(line);}if (br != null) {br.close();}}/*** * 从程序执行路径根目录加载资源 * * @param resource * 文件名 * @return */protected static InputStream getResourceAsStream(String resource) {String stripped = resource.startsWith("/") ? resource.substring(1): resource;InputStream stream = null;ClassLoader classLoader = Thread.currentThread().getContextClassLoader();if (classLoader != null) {stream = classLoader.getResourceAsStream(stripped);}return stream;}}
?
运行结果:
包目录test.txt
根目录test.txt