Java中File类的构造函数需要我们传入一个pathname,当我们传入以"/"开头的pathname表示绝对路径,其他均表示相对路径。

一:绝对路径名:是完整的路径名,不需要任何其他信息就可以定位它所表示的文件绝对路径表示从根目录定位文件位置,不需要参照其他文件路径,win中从某个分区磁盘如"e://"开始定位,linux表示从根目录"/"开始定位。

二:相对路径:相对路径名必须使用取自其他路径名的信息进行解释。java.io 包中的类总是根据当前用户目录来解析相对路径名。此目录可以通过System.getProperty("user.dir");获取。通常是 Java 虚拟机的调用目录。比如我们有个Test类

public class Test {
public static void main(String[] args) {
System.out.println(System.getProperty("user.dir"));
}
}

当我们将Test.class移动到E:\a路径下执行,输出为:"E:\a",

我们在Eclipse创建项目FilePathTest(路径-->E:\WorkSpace\FilePathTest),并创建如上Test类,结构如下:--a.txt

FilePathTest
--src
        --com
  --Test.java
--a.txt
     --bin
        --com
  --Test.class
--a.txt

则此时运行Test输出为"E:\WorkSpace\FilePathTest",也就是相对的目录项目目录。如果此时需要在Test类中获取项目a.txt文件需要如下使用

File f = new File("bin/a.txt");

三、使用ClassLoader、Class读取配置文件

jvm通过类加载器加载类,我们可以通过类加载器的加载的目录作为相对目录用来读取文件,类加载器提供了

public URL getResource(String name)

public InputStream getResourceAsStream(String name) 

通常使用方式为:Test.class.getClassLoader().getResource("");

Class也提供相同的方法,只不过class相对的目录为"类加载器相对的目录/类的package";

特别注意:当我们需要将项目打包成jar,此时如果使用getResource()读取jar中的配置文件,此时返回的URL格式为jar中特有格式file:\E\Test.jar!\a.txt,这种格式作为File()的路径名是不会被识别的,所以如果我们需要读取jar中的文件则需要使用getResourceAsStream(""),直接获取输入流进行操作。

mmse4j-core-1.9.1.jar中的Dictionary就是因为使用getResource()读取同一个jar中的字典数据(Dictionary.getDefalutPath())才会找不到文件而报错,代码如下:

URL url = Dictionary.class.getClassLoader().getResource("data");
File defalutPath = new File(defPath);

最新文章

  1. git回滚到任意版本
  2. UVALive 6092 Catching Shade in Flatland --枚举+几何计算
  3. Erlang安装笔记
  4. java classpath、path用法
  5. C#(pronounced: see sharp) 与 .NET
  6. 【转】Linux系统性能分析命令
  7. Storing and Retrieving Images from SQL Server using Microsoft .NET
  8. (转)Spring事务配置的五种方式
  9. 一个div实现白眼效果
  10. @ConfigurationProperties注解取消location属性
  11. python数据类型之字典类型
  12. Spring boot 2.1.x 造成的问题
  13. webstorm使用YUIcompressor压缩js css并指定目录
  14. Bootstrap table方法,Bootstrap table事件,配置
  15. Python入门-从HelloWorld开始
  16. Xpath定位方法深入探讨及元素定位失败常见情况
  17. 安装 sshpass
  18. Flink(三)Flink开发IDEA环境搭建与测试
  19. Unity调用Window提示框Yes/No(英文提示窗)
  20. 关于HashMap多线程下环形链表的总结

热门文章

  1. Redis源代码分析(23)--- CRC循环冗余算法RAND随机数的算法
  2. java javaEE javaWEB J2EE程序猿猿程序是脑损伤,终身工作程序猿
  3. 高清电视产业的关键词,4K过渡时期8K未来
  4. shell script 入门 笔记
  5. [原创].NET 分布式架构开发实战之一 故事起源
  6. [Django1.6]south于django1.6使用
  7. [Android] App在三星某些机子上闪退:"不保留活动"
  8. 存储管理(两):openfiler它accounts
  9. 无法使用Django新建项目:'django-admin.py'不是内部或外部命令
  10. BC 2015在百度之星程序设计大赛 - 预赛(1)(矩形区域-旋转卡)