package cn.com.TestXml;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class TestStructs {
InputStream in = getClass().getResourceAsStream("prop.properties");
public static void main(String[] args){
TestStructs ts = new TestStructs();
Properties pro = new Properties();
try {
pro.load(ts.in);
} catch (IOException e) {
e.printStackTrace();
}
String str = pro.getProperty("username");
System.out.println(str);
if(ts.in != null)
System.out.println("wo zhao dao le ");
else
System.out.println("我找不到文件啊");
}
}我用的是eclipse
首先说明:prop.properties放在工程目录下!!然后用("prop.properties")测试 异常。然后用("/prop.properties");通过!可以说明
/ 代表的是工程目录。也就是说有了/ 就会先在工程目录找。如果把 prop.properties放在工程下令一个包例如 cn.com.node 那么路径就相应为/cn/com/node/prop.properties.也就是说可以跨目录读取文件。但前提是有/
如果路径为“prop.properties” 那么就必须将prop.properties放在类的同一包里 。在使用Class.getResourceAsStream 时, 资源路径有两种方式, 一种以 / 开头,则这样的路径是指定绝对
路径, 如果不以 / 开头, 则路径是相对与这个class所在的包的。
在使用ClassLoader.getResourceAsStream时, 路径直接使用相对于classpath的绝对路径。
还有一些我摘自其他人的:
老兄和我犯的错误是一样的:
要区分Class的getResourceAsStream和ClassLoader的getResourceAsStream方法。
ClassLoader的该方法如果name以/开头那么就什么也找不到了。
而Class的getResourceAsStream方法如果name以/开头那么就把/以后的name传递给ClassLoader的
getResourceAsStream方法。如果不已/开头那么将该class的包名加上name作为参数(用/代替.)之后
传给ClassLoader的对应方法。
看一下程序:
package com.test;
import java.io.*;
public class UseResourceTest {
public static void main(String[] args) throws Exception {
UseResourceTest test = new UseResourceTest();
InputStream in = test.getClass().getResourceAsStream("a.txt");
System.out.println(in);
}
}
效果相当于:
package com.test;
import java.io.*;
public class UseResourceTest {
public static void main(String[] args) throws Exception {
InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream("com/test/a.txt");
System.out.println(in);
}
}
这是我个人的复习笔记。没什么技术含量。看过不要见笑!!!