博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java项目获取文件路径总结
阅读量:5945 次
发布时间:2019-06-19

本文共 4366 字,大约阅读时间需要 14 分钟。

 

目录

 
java获取文件路径的方式比较多,总结可能有疏漏。

1、java.lang.System.getProperty(String key)

System.getProperty("user.dir")这个方法的作用可以获取当前工程的根目录。![我的一个项目](https://img-blog.csdn.net/20160322141415562)

比如获取上图中项目的根目录:C:\Users\Administrator\Desktop\Dictionary;利用这个方法,不管你的项目放在哪里,都已获取到当前的根目录。 

如果你需要获取当前项目的其他属性,比如jdk版本,运行系统版本等,利用System.out.println(System.getProperties())输出所有属性,查看哪些是你所需要的。 
所以,如果我们要获取上图中images文件里的文件,我们可以通过System.getProperty(“user.dir”)+”\\images\\user.jpg”)获取文件路径(双斜杠因为”\”在java中转义字符,所以”\\”才表示”\”),输出后得到: 
C:\Users\Administrator\Desktop\Dictionary\images\user.jpg。

2、java.io.File.File(String pathname)

1. 第一种        File directory = new File("");//设定为当前文件夹        System.out.println(directory.getCanonicalFile());//返回类型为File        System.out.println(directory.getCanonicalPath());//获取标准的路径  ,返回类型为String        System.out.println(directory.getAbsoluteFile());//返回类型为File        System.out.println(directory.getAbsolutePath());//获取绝对路径,返回类型为String输出:        C:\Users\Administrator\Desktop\Dictionary        C:\Users\Administrator\Desktop\Dictionary C:\Users\Administrator\Desktop\Dictionary C:\Users\Administrator\Desktop\Dictionary 2、第二种 File directory = new File(".");//设定为当前文件夹 System.out.println(directory.getCanonicalFile());//返回类型为File System.out.println(directory.getCanonicalPath());//获取标准的路径 ,返回类型为String System.out.println(directory.getAbsoluteFile());//返回类型为File System.out.println(directory.getAbsolutePath());//获取绝对路径,返回类型为String 输出: C:\Users\Administrator\Desktop\Dictionary C:\Users\Administrator\Desktop\Dictionary C:\Users\Administrator\Desktop\Dictionary\. C:\Users\Administrator\Desktop\Dictionary\. 3、第三种 File directory = new File("..");//设定为当前文件夹 System.out.println(directory.getCanonicalFile());//返回类型为File System.out.println(directory.getCanonicalPath());//获取标准的路径 ,返回类型为String System.out.println(directory.getAbsoluteFile());//返回类型为File System.out.println(directory.getAbsolutePath());//获取绝对路径,返回类型为String 输出: C:\Users\Administrator\Desktop C:\Users\Administrator\Desktop C:\Users\Administrator\Desktop\Dictionary\.. C:\Users\Administrator\Desktop\Dictionary\..
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

对于getCanonicalPath()函数,“.”就表示当前的文件夹,而”..“则表示当前文件夹的上一级文件夹 

对于getAbsolutePath()函数,则不管”.”、“..”,返回当前的路径加上你在new File()时设定的路径

对于String java.io.File.getPath()这个方法:

File directory = new File("");        System.out.println(directory.getPath()); //输出给定的路径字符串 File directory = new File("."); System.out.println(directory.getPath()); //输出给定的路径字符串 File directory = new File(".."); System.out.println(directory.getPath()); //输出给定的路径字符串 File directory = new File("images\user.jpg"); System.out.println(directory.getPath()); //输出给定的路径字符串 分别输出: (空) . .. images\user.jpg
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

说明给什么,File.getPath()输出什么。

3 基于classpath 获取资源有以下三种方式:

URL url = this.getClass().getResource("resource_name");   URL url = this.getClass().getClassLoader().getResource("resource_name"); URL url = Thread.currentThread().getContextClassLoader().getResource("resource_name"); 注意:this不能在main函数中使用,main函数中只能这样: URL url = Test.class.getClassLoader().getClass().getResource("/images/user.jpg"); URL url = Test.class.getClassLoader().getClass().getClassLoader().getResource("/images/user.jpg"); 否则会报错“Cannot use this in a static context”。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

第一种是通过Class类实例的getResource方法,后面两种都是ClassLoader类实例的getResource方法。Class.getResource()也是委托ClassLoader的getResource方法来实现的.所以,先说ClassLoader的getResource方法:

(1) ClassLoader的getResource方法参数不能以”/”开头,而且必须是从根目录开始查找, 

这里的根目录是classpath中的目录以及包含引用的jar.比如eclipse的默认将每个工程中Java类运行时的classpath设置为: 工程根目录/bin目录 以及 工程中引用的所有jar包.在编译的时候,将src目录结构拷贝到bin目录中,将java类编译成class文件后连同其他文件按src中原始目录结构拷贝到bin目录中。 
假设某个工厂的classpath如下(两个): 
/bin 
log4j-1.2.16.jar 
其中log4j-1.2.16.jar中有目录结构org\apache\log4j\ (与包org.apach.log4j) 对应,那么 查找bin目录下的test.txt文件使用下面方法ClassLoader.getResource(“test.txt”);注意这里ClassLoader.getResource方法的入参必须是从根目录开始查找,这里根目录就是classpath中的/bin。找 bin/level1/level2/ll.txt文件必须使用ClassLoader.getResource(“level1/level2/ll.txt”); //注意查找必须基于根目录(/bin),并且目录结构也要写对,不能用/开头。

(2) Class.getResource() 略有不同:

(a)可以通过相对路径查找,相对的是 当前实例的Class文件所在的包;
(b)也可以和ClassLoader.getResource()一样从根目录(classpath)开始查找,
但是此时传递给Class.getResource()的参数必须要用 "/" 开头,否则就是相对查找了((a)中的情况)其实,这种代码就是将/去掉,然后调用ClassLoader.getResource()

转载于:https://www.cnblogs.com/dudefu/p/5307729.html

你可能感兴趣的文章
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
oracle中create table with as和insert into with as语句
查看>>
kafka连接异常
查看>>
11g废弃的Hint - BYPASS_UJVC
查看>>
为什么工业控制系统需要安全防护?
查看>>
Mongodb部署记录[3]-主从搭建
查看>>
hive sql操作
查看>>
tomcat 深度优化
查看>>
127 - "Accordian" Patience
查看>>
阿里云CentOS7安装Oracle11GR2
查看>>
nginc+memcache
查看>>
php正则匹配utf-8编码的中文汉字
查看>>
MemCache在Windows环境下的搭建及启动
查看>>
linux下crontab实现定时服务详解
查看>>
Numpy中的random模块中的seed方法的作用
查看>>
用java数组模拟登录和注册功能
查看>>
javaScript实现归并排序
查看>>
关于jsb中js与c++的相互调用
查看>>
UVA 122 Trees on the level 二叉树 广搜
查看>>
POJ-2251 Dungeon Master
查看>>