文件加载路径有关问题
文件加载路径问题
项目中常常需要加载资源文件或者进行文件读写操作,许多人都会遇到文件找不到的问题,很多情况下这是因为路径不对产生的。以下是我总结的解决办法,不足之处,请指正。
工程目录结构如下:
FilePathDemo
--/src
--/com.filepathdemo.test
FilePathDemo.java
test.txt
--/test.txt
test.txt(com.filepathdemo.test中)
包目录test.txt
test.txt(src中)
根目录test.txt
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"); // output br = 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"); // output br = 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