Java中文件路径及其访问

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: Java中文件路径及其访问


文件路径分为绝对路径和相对路径,具体来说Java中的有4种路径:

  1. URI形式的绝对资源路径:例如:file:/E:/EclipseWorkSpace/JavaTest/bin/images/me.jpg。URL是URI的特例,URL的前缀必须是Java认识的。URL可以打开资源而URI不行。URL和URI可以通过各自的toURI()和toURL()方法进行转换。

  2. 本地系统的绝对路径:例如:E:\EclipseWorkSpace\JavaTest\resources\武汉大学.kml。Java.io包中的类需要使用这种形式的参数。但是它们一般也提供了URI类型的参数,而URI类型的参数接收的是URI样式的String。因此,通过URI转换还是可以把URI样式的绝对路径用在java.io包中的类。

  3. 相对于classpath的相对路径:例如:相对于路径file:/E:/EclipseWorkSpace/JavaTest/bin/的路径。其中,bin是项目的classpath。所有的Java源文件编译后的class文件都会复制到这个目录中。

  4. 相对于当前用户目录的相对路径:就是相对于System.getProperty("user.dir")返回的路径。一般对项目而言,这是项目的根目录。一般不使用相对于用户目录的相对路径。

一般的JavaSE程序中,我们一般将资源文件放到src文件夹下。下面来看实例一些访问文件路径的实例:

import java.io.File;
import java.io.IOException;
import java.util.Properties;

public class PathDemo {
   

    public static void main(String[] args) throws IOException {
   
        //第一种方式,我的工程目录是JavaTest
        System.out.println("第一种方式");
        String path = System.getProperty("user.dir");// 获得项目根目录的绝对路径
        System.out.println(path);
        Properties properties = System.getProperties();
        System.out.println(properties.getProperty("user.dir"));
        //第二种方式,这里我的文件目录是这样的:JavaTest(工程目录)\resources\武汉大学.kml
        System.out.println("第二种方式");
        File file = new File("resources/武汉大学.kml");
        if (file.exists()) {
   
            System.out.println(file.getAbsolutePath());//获取绝对路径
            System.out.println(file.getCanonicalPath());//获取标准路径
        }
        //第三种方式,这里我的文件目录是这样的:JavaTest(工程目录)\src\images\me.jpg
        System.out.println("第三种方式");
        System.out.println(PathDemo.class.getResource("/"));//得到当前类文件的URL目录
        System.out.println(PathDemo.class.getResource(""));//得到当前类的classpath目录
        System.out.println(PathDemo.class.getResource("./"));
                //这里访问文件的时候目录前面要加/
        System.out.println(PathDemo.class.getResource("/images/me.jpg"));
        //第四种方式,这里我的文件目录是这样的:JavaTest(工程目录)\src\images\me.jpg    
        System.out.println("第四种方式");
        System.out.println(PathDemo.class.getClassLoader().getResource(""));
                //这里访问文件的时候目录前面不能加/
        System.out.println(PathDemo.class.getClassLoader().getResource("images/me.jpg"));
    }
}

运行结果如下:

第一种方式
E:\EclipseWorkSpace\JavaTest
E:\EclipseWorkSpace\JavaTest
第二种方式
E:\EclipseWorkSpace\JavaTest\resources\武汉大学.kml
E:\EclipseWorkSpace\JavaTest\resources\武汉大学.kml
第三种方式
file:/E:/EclipseWorkSpace/JavaTest/bin/
file:/E:/EclipseWorkSpace/JavaTest/bin/cn/tzy/path/
file:/E:/EclipseWorkSpace/JavaTest/bin/cn/tzy/path/
file:/E:/EclipseWorkSpace/JavaTest/bin/images/me.jpg
第四种方式
file:/E:/EclipseWorkSpace/JavaTest/bin/
file:/E:/EclipseWorkSpace/JavaTest/bin/images/me.jpg

那如果文件不位于src文件夹中,我们可以这样访问:

public class FilePathDemo {
   
    public static void main(String[] args) throws IOException {
   
        //文件直接在工程目录下,这里的工程目录为JavaTest
        File txtFile = new File("readme.txt");
        if (!txtFile.exists()) {
   
            txtFile.createNewFile();
        }
        System.out.println(txtFile.getAbsolutePath());
        //文件在工程文件的子目录中,这里的子目录前面不能加/
        File imgFile = new File("resources/me.jpg");
        if (!imgFile.exists()) {
   
            imgFile.createNewFile();
        }
        System.out.println(imgFile.getAbsolutePath());
    }
}

运行结果如下:

E:\EclipseWorkSpace\JavaTest\readme.txt
E:\EclipseWorkSpace\JavaTest\resources\me.jpg

目录
相关文章
|
29天前
|
Java 程序员 数据安全/隐私保护
Java的访问权限
Java的访问权限
30 1
|
1月前
|
存储 Java
滚雪球学Java(28):轻松掌握数组:访问和遍历技巧
【5月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
24 2
滚雪球学Java(28):轻松掌握数组:访问和遍历技巧
|
17天前
|
Java
Java 如歌判断文件路径是不是一个软连接
在 Java 中,要判断一个文件路径是否是一个软链接(符号链接),可以使用 `Files.isSymbolicLink` 方法。以下是一个示例,演示如何判断文件路径是否是一个软链接: ```java import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class IsSymbolicLinkExample { public static void main(String[] args) {
|
23天前
|
存储 Java 索引
Java数组的地址值与元素访问技术
Java数组的地址值与元素访问技术
20 2
|
11天前
|
SQL Java 数据库
Java一分钟之-Spring Data JPA:简化数据库访问
【6月更文挑战第10天】Spring Data JPA是Spring Data项目的一部分,简化了Java数据库访问。它基于JPA,提供Repository接口,使开发者能通过方法命名约定自动执行SQL,减少代码量。快速上手包括添加相关依赖,配置数据库连接,并定义实体与Repository接口。常见问题涉及主键生成策略、查询方法命名和事务管理。示例展示了分页查询的使用。掌握Spring Data JPA能提升开发效率和代码质量。
30 0
|
1月前
|
Java
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
21 4
|
1月前
|
存储 Java 测试技术
滚雪球学Java(31):玩转多维数组:高效访问和遍历
【5月更文挑战第6天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
19 0
滚雪球学Java(31):玩转多维数组:高效访问和遍历
|
1月前
|
网络协议 算法 Java
Java中如何通过代理实现对HTTP2网站的访问?
Java中如何通过代理实现对HTTP2网站的访问?
|
1月前
|
安全 Java
Java一分钟之-访问修饰符与封装原则
【5月更文挑战第9天】本文介绍了Java中的访问修饰符(public, protected, default, private)及其在封装原则中的应用。理解这些修饰符有助于控制类、接口、方法和变量的访问权限,防止过度暴露内部细节。遵循最小权限原则,合理设计接口,并谨慎使用protected,能有效避免常见问题,提高代码的健壮性和安全性。封装是关键,通过使用private修饰成员变量并提供公共访问方式,可减少耦合,增强系统的可维护性。
22 0
|
1月前
|
Java
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
129 0