Java中文件路径及其访问

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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

目录
相关文章
|
17天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
31 3
|
19天前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
38 2
|
29天前
|
Java
Java访问外网图片地址时,如何添加代理?
【10月更文挑战第14天】Java访问外网图片地址时,如何添加代理?
22 2
|
1月前
|
小程序 Java
小程序访问java后台失败解决方案
小程序访问java后台失败解决方案
44 2
|
1月前
|
小程序 JavaScript Java
小程序访问java后台
小程序访问java后台
27 1
|
1月前
|
存储 Java
深入理解java对象的访问定位
这篇文章深入探讨了Java对象的访问定位机制,比较了使用句柄和直接指针两种主流的对象访问方式,并指出了它们各自的优势,例如句柄访问在对象移动时的稳定性和直接指针访问的速度优势。
33 0
深入理解java对象的访问定位
|
2月前
|
安全 Java 编译器
java访问字段
java访问字段
25 6
|
2月前
|
安全 Java 编译器
java访问类字段
java访问类字段
|
2月前
|
安全 Java 开发者
Java修饰符与封装:理解访问权限、行为控制与数据隐藏的重要性
Java中的修饰符和封装概念是构建健壯、易维护和扩展的Java应用程序的基石。通过合理利用访问权限修饰符和非访问修饰符,开发者能够设计出更加安全、灵活且高效的代码结构。封装不仅是面向对象编程的核心原则之一,也是提高软件项目质量和可维护性的关键策略。
20 1
|
2月前
|
存储 Java 关系型数据库
java: 无法访问org.springframework.ldap.core.LdapTemplate
`亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍报错以及配置用处,根本不懂照抄那些配置是干啥的,稀里糊涂的按照博客搭完也跑不起来,因此记录这个。` `项目背景`:公司项目当前采用http协议+shiro+mysql的登录认证方式,而现在想支持ldap协议认证登录然后能够访问自己公司的项目网站。 `举例说明`:假设我们公司有自己的门户网站,现在我们收购了一家公司,他们数据库采用ldap存储用户数据,那么为了他们账户能登陆我们公司项目所以需要集成,而不是再把他们的账户重新在mysql再创建一遍,万一人家有1W个账户呢,不累死了且也不现实啊。
18 1