很多时候我们都需要在程序中加载各种文件,比如在加载配置文件,加载properties
文件,或者只是加载一个文本文件,然后输出其中的内容,我在初学java
的时候,就对加载文件非常头疼,今天又遇见了加载文件的问题,索性就一下子搞清楚,然后就有了这篇博客,希望能帮到对加载文件有疑惑的人吧。
本文的实验环境是在idea下,但是同样适用于使用eclipse的读者。
一、什么是类路径
这篇文章主要是将怎么操作,所以概念性的东西,就不多赘述了,这里有一篇讲解类路径非常好的文章分享一下:管理 Java 类路径 (Windows)
二、加载文件
1、使用ClassLoader
加载文件
这里演示的加载1.txt
文件,文件内容是Hello,world
文件结构如下:
这里可以发现在idea
中所有放到resources
文件夹下的文件,都会被放到target\classes
下。
代码:
import org.apache.commons.io.IOUtils;
import java.io.InputStream;
/**
* Created by Yifan Jia on 2018/5/5.
*/
public class AJava {
public static void main(String[] args) throws Exception {
AJava a = new AJava();
ClassLoader cl = a.getClass().getClassLoader();
InputStream in = cl.getResourceAsStream("1.txt");
String s = IOUtils.toString(in);
System.out.println(s);
}
}
结果:
2、使用Class
加载文件
如果我们这样写:
package com.first;
import java.io.InputStream;
/**
* Created by Yifan Jia on 2018/5/5.
*/
public class BJava {
public static void main(String[] args) throws Exception {
BJava b = new BJava();
Class bClass = b.getClass();
InputStream in = bClass.getResourceAsStream("1.txt");
String s = IOUtils.toString(in);
System.out.println(s);
}
}
就会出现错误,提示找不到文件:
我们修改一下代码:
package com.first;
import org.apache.commons.io.IOUtils;
import java.io.InputStream;
/**
* Created by Yifan Jia on 2018/5/5.
*/
public class BJava {
public static void main(String[] args) throws Exception {
BJava b = new BJava();
Class bClass = b.getClass();
InputStream in = bClass.getResourceAsStream("/1.txt");
String s = IOUtils.toString(in);
System.out.println(s);
}
}
注意这里只是比上一个代码多了一个/
符号
结果:
三、总结
1、使用ClassLoader
加载文件时,在getResourceAsStream("")
中填入的路径是相对于
classes/
文件下的,比如我们写一个getResourceAsStream("1.txt")
,其实对应的是盘符:...\项目名\target\classes\1.txt
文件。(如果是eclipse
则是在相应的classes
下)
2、使用Class
加载文件时,在getResourceAsStream("")
中填入的路径是相对于
当前的.class
文件所在的目录,比如我们写一个getResourceAsStream("1.txt")
,其实对应的是盘符:...\项目名\target\classes\com\first\1.txt
文件,在上面的例子中,应为改路径下没有1.txt
文件,所有会提示错误。但是当我们在文件前加一个\
符号时getResourceAsStream("/1.txt")
,就会变成和使用ClassLoader
一样,变成相对于
classes/
文件,所以第二次就加载成功了。
如果感觉文章描述的不是很清楚,可以看:讲解的视频