Java文件加载的各种方法-solve problem

1. String filePath = "D:/myfile/test.xt";
2. String filePath = "myfile/test.txt";
3. String filePath = Thread.currentThread().getContextClassLoader().getResource("myfile/test.txt");
File f = new File(filePath);
第1种是常用的从磁盘读文件。
第2种实际上是以工程文件夹(也就是home.dir)为当前目录,然后找myfile/test.txt这个相对路径的文件,如果打成jar包那就是以jar所在目录为当前目录了,需要注意这个不会是以所在类的package目录为当前目录的。
第3种就是类加载器路径找文件了,一般在classpath路径下(如resources下)的文件的加载方式,也就是以resources为当前目录,再找那个相对路径的文件。
------------------------------------------------------------------------------------
常用两种方法,一种是用当前类如ClassA.class.getResource("file.txt") or ("/dir/file.txt");
另一种是我之前总用的ClassLoader方式,即Thread.currentThread().getContextClassLoader()
.getResource("file.txt");
第一种方法主要适合资源和类在一个包下面的,比较好找,可以直接使用不以“/”开头的方式搜索
文件,若以“/”开头则是从项目根路径搜索,具体可以参考下面的例子。
对于第二种方法,java api还有源码里面已经写过,详细的搜索方式可以看看它们。简单来讲,搜索
的文件就是从项目根路径开始的(可以用getResource(“”).getPath()来打印出来),所以再用以
“/”开头来定位文件是找不到的,应该是直接以当前路径为参考,输入文件的相对路径就行了。
而对于File,若使用new File("/file.txt")这个是找不到的,应为"/"是unix的盘符,具体可以看看
Java API。

packagemy;

import java.io.File;
import java.io.IOException;
import java.net.URL;

publicclassMyUrlDemo{


publicstaticvoid main(String[] args){
MyUrlDemo muDemo =newMyUrlDemo();
try{
muDemo.showURL();
}catch(IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}

publicvoid showURL()throwsIOException{

// 第一种:获取类加载的根路径 D:\git\daotie\daotie\target\classes
File f =newFile(this.getClass().getResource("/").getPath());
System.out.println(f);

// 获取当前类的所在工程路径; 如果不加“/” 获取当前类的加载目录 D:\git\daotie\daotie \target\classes\my
File f2 =newFile(this.getClass().getResource("").getPath());
System.out.println(f2);

// 第二种:获取项目路径 D:\git\daotie\daotie
File directory =newFile("");// 参数为空
String courseFile = directory.getCanonicalPath();
System.out.println(courseFile);


// 第三种: file:/D:/git/daotie/daotie/target/classes/
URL xmlpath =this.getClass().getClassLoader().getResource("");
System.out.println(xmlpath);


// 第四种: D:\git\daotie\daotie
System.out.println(System.getProperty("user.dir"));
/*
* 结果: C:\Documents and Settings\Administrator\workspace\projectName
* 获取当前工程路径
*/

// 第五种: 获取所有的类路径 包括jar包的路径
System.out.println(System.getProperty("java.class.path"));

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值