Java中文件路径及其访问

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
大数据开发治理平台 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

目录
相关文章
|
1天前
|
SQL Java Apache
实时计算 Flink版操作报错合集之使用parquet时,怎么解决报错:无法访问到java.uti.Arrays$ArrayList类的私有字段
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
22天前
|
消息中间件 Java Kafka
Java 客户端访问kafka
Java 客户端访问kafka
29 9
|
6天前
|
前端开发 Java 编译器
【前端学java】类中的访问权限详解,通俗易懂(5)
【8月更文挑战第9天】类中的访问权限详解,通俗易懂(5)
15 0
|
29天前
|
Java 编译器
Java演进问题之链式访问和集中访问区别如何解决
Java演进问题之链式访问和集中访问区别如何解决
|
1月前
|
Java 程序员
【Java探索之旅】继承概念_语法_父类的成员访问
【Java探索之旅】继承概念_语法_父类的成员访问
39 10
|
2月前
|
SQL 存储 Java
优化Java应用的数据库访问性能
优化Java应用的数据库访问性能
|
2月前
|
存储 NoSQL Java
探索Java分布式锁:在高并发环境下的同步访问实现与优化
【6月更文挑战第30天】Java分布式锁在高并发下确保数据一致性,通过Redis的SETNX、ZooKeeper的临时节点、数据库操作等方式实现。优化策略包括锁超时重试、续期、公平性及性能提升,关键在于平衡同步与效率,适应大规模分布式系统的需求。
62 1
|
1月前
|
SQL Java 数据库连接
Java中实现优化的数据库访问和查询性能
Java中实现优化的数据库访问和查询性能
|
1月前
|
SQL 缓存 Java
优化Java应用的数据库访问性能技巧
优化Java应用的数据库访问性能技巧
|
1月前
|
存储 NoSQL Java
探索Java分布式锁:在高并发环境下的同步访问实现与优化
【7月更文挑战第1天】在分布式系统中,Java分布式锁解决了多节点共享资源的同步访问问题,确保数据一致性。常见的实现包括Redis的SETNX和过期时间、ZooKeeper的临时有序节点、数据库操作及Java并发库。优化策略涉及锁超时、续期、公平性及性能。选择合适的锁策略对高并发系统的稳定性和性能至关重要。
69 0