文件加载路径有关问题

文件加载路径问题

  项目中常常需要加载资源文件或者进行文件读写操作,许多人都会遇到文件找不到的问题,很多情况下这是因为路径不对产生的。以下是我总结的解决办法,不足之处,请指正。

  工程目录结构如下:

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