Java读取工程里的文件
我们会经常遇到这样的问题,工程里有一个文件,Java程序要读取这个文件,不采用绝对路径的方法,而使用相对路径来读取文件。以后迁移到其他机器上就不会出现读取文件失败的问题了。以下就介绍java如何读取相对路径的文件。
1.java project环境,使用java.io用相对路径读取文件的例子:
*目录结构:
MyProject
|___src
|___com.etrip.SamplesReader.java
|___resources
|___train.txt,列车时刻表.xls
*SamplesReader.java:
String filepath="resource/train.txt";//*注意:相对路径的起始处无斜杠"/"
File file=new File(filepath);
*我们留意filepath的内容,java.io默认定位到当前用户目录("user.dir")下,即:工程根目录"d:\workspace\MyProject"下,
因此,此时的相对路径(以user.dir为基路径的路径)为"resources/train.txt"。
这样,JVM就可以根据"user.dir"与"resource/train.txt"得到完整的路径(即绝对路径)"d:\workspace\MyProject\resources\train.txt",从来找到train.txt文件。
2.javaEE环境,使用Classloader用相对路径读取xml的例子
java使用相对路径读取xml文件:
一、xml文件一般的存放位置有三个:
a)放在WEB-INF下;
b)xml文件放在/WEB-INF/classes目录下或classpath的jar包中;
c)放在与解析它的java类同一个包中,不一定是classpath;
二、相对应的两种使用相对路径的读取方法:
方法一:将xml文件放在WEB-INF目录下,
程序代码:
InputStream is=getServletContext().getResourceAsStream("/WEB-INF/*.xml");
方法二:将xml文件放在/WEB-INF/classes目录下或classpath的jar包中,则可以使用ClassLoader的静态方法getSystemResourceAsStream(String s)读取;
程序代码:
String s_xmlpath="com/etrip/web/ext/xml/hotspot.xml";
InputStream in=ClassLoader.getSystemResourceAsStream(s_xmlpath);
方法三:xml在随意某个包路径下:
String s_xmlpath="com/etrip/web/ext/xml/hotspot.xml";
ClassLoader classLoader=Main.class.getClassLoader();
InputStream in=classLoader.getResourceAsStream(s_xmlpath);
必须通过ClassLoader来执行getResourceAsStream()方法。获取ClassLoader有两种方式:
InputStream in = Main.class.getClassLoader().getResourceAsStream(xmlfilename);
InputStream in = Main.this.getClass().getClassLoader().getResourceAsStream(xmlfilename);