高级API之file类的使用(上)

简介: 高级API之file类的使用(上)

前言


Java中的File类是java.io包中提供的一个操作文件和目录的类,它提供了一些方法用于操作系统底层的文件和目录的创建、读取、修改、删除等操作。File类可以表示文件或目录的抽象路径名,用于在不同的操作系统平台下进行文件和目录的操作,比如Windows和Linux等系统。

d4edbd6746654a78b9f96ce92a47ac85.png


File类的使用


  1. File(String path):如果 path 是实际存在的路径,则该 File 对象表示的是目录;如果 path 是文件名,则该 File 对象表示的是文件。
  2. File(String path, String name):path 是路径名,name 是文件名。
  3. File(File dir, String name):dir 是路径对象,name 是文件名。

使用任意一个构造方法都可以创建一个 File 对象,然后调用其提供的方法对文件进行操作。

下面是file对象的一些常用方法

boolean canRead() 测试应用程序是否能从指定的文件中进行读取
boolean canWrite() 测试应用程序是否能写当前文件
boolean delete() 删除当前对象指定的文件
boolean exists() 测试当前 File 是否存在
String getAbsolutePath() 返回由该对象表示的文件的绝对路径名
String getName() 返回表示当前对象的文件名或路径名(如果是路径,则返回最后一级子路径名)
String getParent() 返回当前 File 对象所对应目录(最后一级子目录)的父目录名
boolean isAbsolute()

测试当前 File 对象表示的文件是否为一个绝对路径名。该方法消除了不同平台的差异,可以直接判断 file 对象是否为绝对路径。在 UNIX/Linux/BSD 等系统上,如果路径名开头是一条斜线/,则表明该 File 对象对应一个绝对路径;在 Windows 等系统上,如果路径开头是盘符,则说明它是一个绝对路径。

boolean isDirectory() 测试当前 File 对象表示的文件是否为一个路径
boolean isFile() 测试当前 File 对象表示的文件是否为一个“普通”文件
long lastModified() 返回当前 File 对象表示的文件最后修改的时间
long length() 返回当前 File 对象表示的文件长度
String[] list() 返回当前 File 对象指定的路径文件列表
String[] list(FilenameFilter) 返回当前 File 对象指定的目录中满足指定过滤器的文件列表
boolean mkdir() 创建一个目录,它的路径名由当前 File 对象指定
boolean mkdirs() 创建一个目录,它的路径名由当前 File 对象指定
boolean renameTo(File) 将当前 File 对象指定的文件更名为给定参数 File 指定的路径名


Windows 的路径分隔符使用反斜线“\”,而 Java 程序中的反斜线表示转义字符,所以如果需要在 Windows 的路径下包括反斜线,则应该使用两条反斜线或直接使用斜线“/”也可以。Java 程序支持将斜线当成平台无关的路径分隔符。

假设在 Windows 操作系统中有一文件 D:\javaspace\hello.java,在 Java 中使用的时候,其路径的写法应该为 D:/javaspace/hello.java 或者 D:\\javaspace\\hello.java


获取文件属性


在 Java 中获取文件属性信息的第一步是先创建一个 File 类对象并指向一个已存在的文件, 然后调用表 1 中的方法进行操作。


例 1

假设有一个文件位于 C:\windows\notepad.exe。编写 Java 程序获取并显示该文件的长度、是否可写、最后修改日期以及文件路径等属性信息。实现代码如下:

       public 
       class 
       Test02 {
       public 
       static 
       void 
       main
       (String[] args) {
       String 
       path 
       = 
       "C:/windows/"; 
       // 指定文件所在的目录
       File 
       f 
       = 
       new 
       File(path, 
       "notepad.exe"); 
       // 建立File变量,并设定由f变量引用
               System.out.println(
       "C:\\windows\\notepad.exe文件信息如下:");
               System.out.println(
       "============================================");
               System.out.println(
       "文件长度:" + f.length() + 
       "字节");
               System.out.println(
       "文件或者目录:" + (f.isFile() ? 
       "是文件" : 
       "不是文件"));
               System.out.println(
       "文件或者目录:" + (f.isDirectory() ? 
       "是目录" : 
       "不是目录"));
               System.out.println(
       "是否可读:" + (f.canRead() ? 
       "可读取" : 
       "不可读取"));
               System.out.println(
       "是否可写:" + (f.canWrite() ? 
       "可写入" : 
       "不可写入"));
               System.out.println(
       "是否隐藏:" + (f.isHidden() ? 
       "是隐藏文件" : 
       "不是隐藏文件"));
               System.out.println(
       "最后修改日期:" + 
       new 
       Date(f.lastModified()));
               System.out.println(
       "文件名称:" + f.getName());
               System.out.println(
       "文件路径:" + f.getPath());
               System.out.println(
       "绝对路径:" + f.getAbsolutePath());
           }
       }


在上述代码中 File 类构造方法的第一个参数指定文件所在位置,这里使用C:/作为文件的实际路径;第二个参数指定文件名称。创建的 File 类对象为 f,然后通过 f 调用方法获取相应的属性,最终运行效果如下所示。

C:\windows\notepad.exe文件信息如下:

============================================

文件长度:193536字节

文件或者目录:是文件

文件或者目录:不是目录

是否可读:可读取

是否可写:可写入

是否隐藏:不是隐藏文件

最后修改日期:Mon Dec 28 02:55:19 CST 2016

文件名称:notepad.exe

文件路径:C:\windows\notepad.exe

绝对路径:C:\windows\notepad.exe


创建和删除文件


File 类不仅可以获取已知文件的属性信息,还可以在指定路径创建文件,以及删除一个文件。创建文件需要调用 createNewFile() 方法,删除文件需要调用 delete() 方法。无论是创建还是删除文件通常都先调用 exists() 方法判断文件是否存在。


例 2

假设要在 C 盘上创建一个 test.txt 文件,程序启动时会检测该文件是否存在,如果不存在则创建;如果存在则删除它再创建。

       public 
       class 
       Test03 {
       public 
       static 
       void 
       main
       (String[] args) 
       throws IOException {
       File 
       f 
       = 
       new 
       File(
       "C:\\test.txt"); 
       // 创建指向文件的File对象
       if (f.exists()) 
       // 判断文件是否存在
               {
                   f.delete(); 
       // 存在则先删除
               }
               f.createNewFile(); 
       // 再创建
           }
       }

运行程序之后可以发现,在 C 盘中已经创建好了 test.txt 文件。但是如果在不同的操作系统中,路径的分隔符是不一样的,例如:

  • Windows 中使用反斜杠\表示目录的分隔符。
  • Linux 中使用正斜杠/表示目录的分隔符。


那么既然 Java 程序本身具有可移植性的特点,则在编写路径时最好可以根据程序所在的操作系统自动使用符合本地操作系统要求的分隔符,这样才能达到可移植性的目的。要实现这样的功能,则就需要使用 File 类中提供的两个常量。

       public 
       static 
       void 
       main
       (String[] args) 
       throws IOException {
       String 
       path 
       = 
       "C:" + File.separator + 
       "test.txt"; 
       // 拼凑出可以适应操作系统的路径
       File 
       f 
       = 
       new 
       File(path);
       if (f.exists()) 
       // 判断文件是否存在
           {
               f.delete(); 
       // 存在则先删除
           }
           f.createNewFile(); 
       // 再创建
       }

程序的运行结果和前面程序一样,但是此时的程序可以在任意的操作系统中使用。


注意:在操作文件时一定要使用 File.separator 表示分隔符。在程序的开发中,往往会使用 Windows 开发环境,因为在 Windows 操作系统中支持的开发工具较多,使用方便,而在程序发布时往往是直接在 Linux 或其它操作系统上部署,所以这时如果不使用 File.separator,则程序运行就有可能存在问题。关于这一点我们在以后的开发中一定要有所警惕。

目录
相关文章
|
3月前
|
API 索引
String类下常用API
String类下常用API
44 1
|
3月前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
115 0
|
1月前
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
28 0
|
2月前
|
Java API 开发者
【Java字节码操控新篇章】JDK 22类文件API预览:解锁Java底层的无限可能!
【9月更文挑战第6天】JDK 22的类文件API为Java开发者们打开了一扇通往Java底层世界的大门。通过这个API,我们可以更加深入地理解Java程序的工作原理,实现更加灵活和强大的功能。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来!
|
2月前
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
|
3月前
|
Java 索引
|
3月前
|
Java API
|
5月前
|
监控 Shell API
了解asyncio高级api索引
【6月更文挑战第27天】本文是`asyncio` 高级API概览:运行异步任务如`run()`, `create_task()`;等待机制如`gather()`, `wait_for()`, `shield()`;任务管理如`current_task()`, `all_tasks()`;队列和子进程功能;同步原语包括锁、事件和信号量。示例中涉及`sleep()`, `gather()`, `wait_for()`, 子进程创建及同步异常`TimeoutError`和`CancelledError`。查阅官方文档以获取详细信息和示例代码。
48 1
了解asyncio高级api索引
|
4月前
|
Java 测试技术 API
Java详解 : API常用类
Java详解 : API常用类
|
5月前
|
Java API 索引
java中String类常用API
java中String类常用API
下一篇
无影云桌面