Java 使用相对路径读取文件
一. java project环境,使用java.io获取相对路径读取文件的例子:
目录结构:
DecisionTree
|___src
|___com.decisiontree.SamplesReader.java
|___resource
|___train.txt,test.txt
类 SamplesReader.java 中代码:
String filepath = "resource/train.txt";//注意filepath的内容;
File file = new File(filepath);
...
可以看到filepath的内容,java.io默认定位到当前用户目录(“user.dir”)下,即:工程根目录"D:\DecisionTree"下,因此,此时的相对路径(以user.dir为基路径的路径)为"resource/train.txt"。
这样,JVM就可以根据"user.dir"与"resource/train.txt"得到完整的路径(即绝对路径)“D:\DecisionTree\resource\train.txt”,从来找到train.txt文件。
注意:相对路径的起始处无斜杆"/";例如:
filepath="resource/train.txt";
而不是
filepath="/resource/train.txt"; //error!
二. javaEE环境,使用Classloader用相对路径读取xml的例子:
参见之前写的文章 <<通过虚拟路径或相对路径读取一个xml文件,避免硬编码>>。内容如下:
java使用相对路径读取xml文件:
1、xml文件一般的存放位置有三个:
- 放在WEB-INF下.
- xml文件放在/WEB-INF/classes目录下或classpath的jar包中
- 放在与解析它的java类同一个包中,不一定是classpath
2、相对应的两种使用相对路径的读取方法:
方法一:(未验证)
将xml文件放在WEB-INF目录下,然后
程序代码:
InputStream is = getServletContext().getResourceAsStream("/WEB-INF/xmlfile.xml");
方法二:将xml文件放在/WEB-INF/classes目录下或classpath的jar包中,则可以使用ClassLoader的静态方法getSystemResourceAsStream(String s)读取;
程序代码:
String s_xmlpath = "com/spf/web/ext/hotspot/hotspotxml/hotspot.xml";
InputStream in = ClassLoader.getSystemResourceAsStream(s_xmlpath);
方法三:xml在随意某个包路径下:
String s_xmlpath = "com/spf/web/ext/hotspot/hotspotxml/hotspot.xml";
ClassLoader classLoader = HotspotXmlParser.class.getClassLoader();
InputStream in = classLoader.getResourceAsStream(s_xmlpath);