https://segmentfault.com/a/1190000012849921?utm_source=tag-newest
普通java类中加载配置文件路径
以classloader的方式来获取配置文件路径
String path = ClassName.class.getClassLoader().getResource("xxx.file").getPath();
这样就得到了一个文件的路径,继而我们可以把它转化成流。
InputStream inputStream = new FileInputStream(path);
是不是很简单呢。
用Class类加载资源文件
InputStream inputStream = ClassName.class.getResourceAsStream("/error.xml");
绝对定位,“/”开头,此时即以classpath为根目录
相对定位,不加“/”,则以调用getResourceAsStream类的包路径作为根目录(即该类所在包下获取资源)
https://www.cnblogs.com/coshaho/p/7466684.html
public class FilePathLearn {
public static void main(String[] args) throws IOException {
// 方案1
// 获取代码工程路径,生产环境上只有class文件,没有java文件与代码工程,这种方式不可取
File file = new File(""); System.out.println(file.getCanonicalPath());
// 方案2
// 获取代码工程路径,生产环境上使用会出现问题 System.out.println(System.getProperty("user.dir"));
// 方案3
// 获取class文件根目录(路径中包含空格会被转义为%20,此时new File会失败)
file = new File(FilePathLearn.class.getResource("/").getPath()); System.out.println(file.getCanonicalPath());
// 方案4
// 获取class文件目录(路径中包含空格会被转义为%20,此时new File会失败)
file = new File(FilePathLearn.class.getResource("").getPath()); System.out.println(file.getCanonicalPath());
// 方案5
// 可以看出来,这种方法的效果和方案3效果相同
file = new File(FilePathLearn.class.getClassLoader().getResource("").getPath()); System.out.println(file.getCanonicalFile());
// 由于路径可能包含空格,new file可能失败,所以可以直接打开流读取文件 InputStream stream = FilePathLearn.class.getResource("CE_Excel.xml").openStream(); InputStreamReader reader = new InputStreamReader(stream); BufferedReader bufReader=new BufferedReader(reader); String str = null; while ((str = bufReader.readLine()) != null) { System.out.println(str); } } }