您的位置:首页 > 编程语言 > Java开发

java project 和 javaWeb的读取文件路径问题(整理自百度经验,有空验证下)

2015-04-18 20:31 387 查看
总结:

1. 从工程根目录开始的路径直接读取

File f = new File(“1.txt”),或者写成这样:File f = new File(“./1.txt”);

./,表示工程根目录,可以省略!

这里不要使用File f = new File(“../1.txt”);

2. 通过字节码对象读取(避免)

在Hello.java中:String f = Hello.class.getResource(“/4.txt”).getPath();

这种以“/”开头的是以绝对路径方式读取,意思是从bin目录下开始读取4.txt。

如果写成这样:String f = Hello.class.getResource(“4.txt”).getPath();

这种不以“/”开头的是以相对路径方式读取,意思是从当前类所在的目录下开始读取4.txt。

3. 通过classloader读的话,它只会从classpath下开始读取(不是class位置),并且java
project不能以“/”开头,javaWeb以不以“/”开头路径相同。


3.1、当前类名.class.getResource()的返回值类型是URL;同时还有一个方法:当前类名.class.getResourceAsStream(),它的返回值类型是InputStream,是一个字节读取流。在开发中可以根据需要选择相应的方法。

3.2、要读取文件,文件首先必须真实存在,要不然返回的URL就等于Null。

4. 项目最终要部署在web服务器中,文件只能使用绝对路径来读取

getServletConfig().getServletContext().getRealPath(“/WEB-INF/2.txt”);这种方式只是获取文件的路径字符串,并不会检查是否真的存在这样一个文件。“/WEB-INF/2.txt”换成“WEB-INF/2.txt”,路径是一样的。

通过ServletContext对象可以获取web工程根目录及其子目录(包括WEB-INF、classes等)所有文件的绝对路径。

4.1如果文件位于classpath(也就是classes目录)下,我们还可以通过另两种方式来读取。

1、通过字节码对象来读

这种方式与上边Java Project中通过字节码对象读取类路径下文件的方式相同,可参照上边的2。

2、通过类加载器来读

这种方式与上边Java Project中通过classloader读取类路径下文件的方式基本相同,可参照上边的3。 

唯一不同的是: Java Project中通过classloader读的话,它只会从classpath下开始读取,并且不能以“/”开头。而在JavaWeb Project中,可以是相对路径,也可以是绝对路径,也就说你加不加“/”开头效果是一样的。

===Java Project和JavaWeb Project,通过classloader读的话,都不要加“/”开头就不会有问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java javaweb classloader