对于读取文件可以分为两个步骤:
1. 找到该文件的绝对路径
2. 根据获取到的文件绝对路径通过File来创建文件对象,然后根据相应的api进行读取文件中的内容
在这两步中找到该文件的绝对路径最为重要,所以我在下面的讲解中主要讲解如果获取文件的绝对路径,
对于获取到文件的绝对路径以后再文件中的具体内容我会在最后案例中给出
同时由于我们在使用meclipse进行开发的时候可以创建两种工程java project和 j2ee (web项目),下面介绍这两类工程下如何获取文件的绝对路径
1. java project
在该工程下文件存放的位置可分为:
(1):类路径下(classpath)读取文件绝对路径的方式:
<1>:
this.getClass().getResource("/zhang/TestGetFile.class");
<2>: this.getClass().getClassLoader().getResource("zhang/TestGetFile.class");
分析:
上面的两种方式我们都可以进行获取到类路径下文件的绝对路径
我们通过:
System.out.println(this.getClass().getResource("/"));
// 项目所在位置/工程名/bin
System.out.println(his.getClass().getClassLoader().getResource("")); // 项目所在位置/工程名/bin
我们发现上面的两个输出的是一个目录都是当前类的跟目录,但是我们使用的不同的方法,
一个是利用Class的getResource方法,一个是利用类加载器的getResource方法,通过查看api发现:
查找带有给定名称的资源。查找与给定类相关的资源的规则是通过定义类的 class loader 实现的。此方法委托给此对象的类加载器。
这说明Class的getResource方法还是调用的类加载器的方法
同时我们也注意到Class的getResource方法参数传递了一个"/",这是该方法做的处理操作,具体的可以查看api
(2.) : 工程目录下的文件的绝对路径
//先获取类的根目录
urlPath = this.getClass().getClassLoader().getResource("");
//找到当前工程所在的目录
String mypath = new File(urlPath.getPath(),"../").getCanonicalPath();
//进行拼接文件的绝对路径
mypath = mypath + "工程目下的文件的具体目录"
2. web工程
在该工程下文件存放的位置可分为:
1. 对于普通的类中获取文件的绝对路径
通过上面的在java project工程下的方法可以获取
2. 在Servlet类文件中获取文件的绝对路径
ServletContext. getResourceAsStream(String path):默认从WebRoot根目录下取资源,Tomcat下path是否以’/‘开头无所谓
下面是一个根据路径进行读取文件中的内容的一个方法:
public String getRemindSubSum(String pathName) {
File file = new File(pathName);
StringBuffer sb = new StringBuffer();
BufferedReader reader;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String tempString = null;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
sb.append(tempString);
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}