写点什么

还没搞懂 Java 中的路径?看完这篇文章你就全懂了

  • 2021 年 11 月 12 日
  • 本文字数:1502 字

    阅读完需:约 5 分钟

三、File 类中的路径

在 project 中,相对路径的根目录是 project 的根文件夹,创建文件的写法是:


「相对路径:」?D:\code\River\JavaSE(也就是工程的相对路径),注意路径不能以"/"开头


private static void filePath() {File file = new File("javaIO/src/main/java/org/huanghe/stream/Java 中字符流与字节流的区别.md");System.out.println(file.exists());System.out.println(System.getProperty("user.dir"));}



「绝对路径:」


private static void filePath() {File file = new File("D:\code\River\JavaSE\javaIO\src\main\java\org\huanghe\stream\Java 中字符流与字节流的区别.md");System.out.println(file.exists());System.out.println(System.getProperty("user.dir"));}


四、获取文件的路径 class.getResource 和 class.getClassLoader

在我们 Java 开发中往往需要去获取文件中的内容,一般的我们会使用 File 的形式获取,如:我要获取“c:\文件.txt”此时我们需要创建一个 File 的对象 File file=new FIle("c:\文件 txt");


然后在使用 file 类创建一个文件文件输入流 :FileInputStream in =new FileInputStream(file),然后再是使用该输入流进行我们想要的操作,但是这样有一个弊端,就是我们的文件路径是一种硬编码的形式,在 Java 编码过程中我们极其不推荐这种写法


当然在 web 项目下,我们可以通过 application 对象的 getRealPath(“文件名”)的方式获取文件的绝对路径,但是这样也不是很推荐,因此我们可以使用 class.getResource(path)和 class.getClassLoader(path)方法来获取文件资源,那么我们来研究一下两者的区别:


4.1 class.getResource(path)


其中的参数 path 有两种形式,一种是以“/”开头的,另一种是不以"/"开头;


  • 「以'/'开头的表示」:从项目的根路径下去获取文件即 classPath 目录下

  • **不以"/"开头:**以该类对象所在位置为根路径来进行查找的


/**


  • 测试 class.getResource 获取文件路径*/public static void testClassGetResource() {System.out.println(


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


_01_JavaFilePath.class.getResource(""));System.out.println(_01_JavaFilePath.class.getResource("/"));}



输出的结果为:


file:/D:/Code/JavaSE/io/target/classes/com/huanghe/chapter/ : 返回的是 testClassGetResource.class 这个类所在的目录 file:/D:/Code/JavaSE/io/target/classes/ : 返回的是 项目的 classpath 目录的路径



假设现在的项目结构如下所示,针对下面的三种情况如何获取:


获取上图所示的三种文件的方法:


/**


  • 测试 class.getResource 获取文件路径*/public static void testClassGetResource2() {System.out.println(_01_JavaFilePath.class.getResource("file/test.properties"));System.out.println(_01_JavaFilePath.class.getResource("../txt/01-java-filepath.txt"));System.out.println(_01_JavaFilePath.class.getResource("/01-java-filepath.txt"));}



输出的结果为:


file:/D:/Code/JavaSE/io/target/classes/com/huanghe/chapter/one/file/test.properties


file:/D:/Code/JavaSE/io/target/classes/com/huanghe/chapter/txt/01-java-filepath.txt


file:/D:/Code/JavaSE/io/target/classes//01-java-filepath.txt



:class.getResource()和 class.getResourceAsStream()方式的使用在路径上是一致的。


4.2 Class.getClassLoader().getResource(String path)


该方法中的参数 path 不能以“/“开头,path 表示的是从 classpath 下获取资源的


package testpackage;public class TestMain {public static void main(String[] args) {TestMain t = new TestMain();

评论

发布
暂无评论
还没搞懂Java中的路径?看完这篇文章你就全懂了