文件操作和IO(2):Java中操作文件

简介: 文件操作和IO(2):Java中操作文件

 本章内容,主要涉及文件的元信息、路径的操作,并不存在对文件的读写操作。

       Java通过 java.io.File 类来对一个文件(包括目录)进行抽象的描述。注意:有File对象并不意味着真实存在该文件。

以下是对File的概述:


一、File的属性


修饰符及类型 属性 说明
static String pathSeparator 依赖于系统的路径分隔符,String
类型的表示
static char pathSeparatorChar 依赖于系统的路径分隔符,char类

这里路径直接的分隔符是根据系统自动调整的,在开发过程中还是更推荐使用正斜杠 “ / ”。windows也支持正斜杠。


二、File的构造方法


签名 说明
File(File parent, String child) 根据父目录 + 孩子文件路径,创建⼀个新的 File 实例
File(String pathname) 根据文件路径创建⼀个新的 File 实例,路径可以是绝
对路径或者相对路径
File(String parent, String child) 根据父目录 + 孩子文件路径,创建⼀个新的 File 实
例,父目录用路径表示

这里主要介绍中间的构造方法,中间的是最常用的。注意:这里的决定路径有两种情况:

       1、如果是在idea中运行程序,此时工作目录就是在项目所在的目录。

       2、如果把代码打包成一个jar包,此时工作目录就是在jar包所在目录。


三、File的方法


修饰符及返回值类型 方法签名 说明
String getParent() 返回 File 对象的⽗⽬录⽂件路径
String getName() 返回 FIle 对象的纯⽂件名称
String getPath() 返回 File 对象的⽂件路径
String getAbsolutePath() 返回File 对象的绝对路径
String getCanonicalPath() 返回 File 对象的修饰过的绝对路径
boolean exists() 判断 File 对象描述的⽂件是否真实
存在
boolean                          isDirectory()                   判断 File 对象代表的⽂件是否是⼀个⽬录
boolean isFile() 判断 File 对象代表的⽂件是否是⼀
个普通⽂件
boolean createNewFile() 根据 File对象,⾃动创建⼀个空⽂
件。成功创建后返回 true
boolean delete() 根据 File 对象,删除该⽂件。成功
删除后返回 true 
void deleteOnExit() 根据 File 对象,标注⽂件将被删
除,删除动作会到 JVM 运⾏结束时
才会进⾏
String[] list() 返回 File 对象代表的⽬录下的所有
⽂件名
File[] listFiles() 返回 File 对象代表的⽬录下的所有
⽂件,以 File 对象表⽰
boolean mkdir() 创建 File 对象代表的⽬录
boolean mkdirs() 创建 File 对象代表的⽬录,如果必
要,会创建中间⽬录
boolean renameTo(File dest) 进⾏⽂件改名,也可以视为我们平
时的剪切、粘贴操作
boolean canRead() 判断⽤⼾是否对⽂件有可读权
boolean canWrite() 判断⽤⼾是否对⽂件有可写权限


四、代码示例


1、getName,getParent,getPath方法

绝对路径的File对象,代码如下

public class IODemo1 {
 public static void main(String[] args) {
 //指定文件的路径
 File f1 = new File("C:/IOTest/test.txt");//绝对路径
        System.out.println(f1.getPath());//返回File对象的⽂件路径
         System.out.println(f1.getParent());//返回 File 对象的⽗⽬录⽂件路径
         System.out.println(f1.getName());//返回 FIle 对象的纯⽂件名称
     }
 }

执行结果:

相对路径的File对象,代码如下

 public class IODemo1 {
 public static void main(String[] args) {
 //指定文件的路径
 File f1 = new File("./test.txt");//绝对路径
         System.out.println(f1.getPath());//返回File对象的⽂件路径
         System.out.println(f1.getParent());//返回 File 对象的⽗⽬录⽂件路径
         System.out.println(f1.getName());//返回 FIle 对象的纯⽂件名称
     }
 }

执行结果:

2、getAbsolutePath,getCanonicalPath方法

使用绝对路径创造一个File对象,代码如下

 public class IODemo2 {
 public static void main(String[] args) throws IOException {
 File f = new File("C:/IOTest/test.txt");//绝对路径
         System.out.println(f.getAbsolutePath());//返回File对象的绝对路径
         System.out.println(f.getCanonicalPath());//返回File对象的修饰过的绝对路径
     }
 }

执行结果:

使用相对路径创建File对象,代码如下:

 public class IODemo2 {
 public static void main(String[] args) throws IOException {
 File f = new File("./test.txt");//绝对路径
         System.out.println(f.getAbsolutePath());//返回File对象的绝对路径
         System.out.println(f.getCanonicalPath());//返回File对象的修饰过的绝对路径
     }
 }

执行结果:

可以看出,上面方法在绝对路径中没有啥差别,但在相对路径的就有些许差别。getCanonicalPath返回File对象的修饰过的绝对路径,也就没有了点 ' . ' 修饰。

3、exists,isDirectory,createNewFile方法

使用相对路径创建File对象,代码如下:

 public class IODemo3 {
 public static void main(String[] args) {
 File f = new File("./test.txt");
 boolean ret1 = f.exists();//判断 File 对象描述的⽂件是否真实存在
 boolean ret2 = f.isDirectory();//判断 File 对象代表的⽂件是否是⼀个⽬录
 boolean ret3 = f.isFile();//判断 File 对象代表的⽂件是否是⼀个普通⽂件
         System.out.println(ret1);
         System.out.println(ret2);
         System.out.println(ret3);
     }
 }

执行结果:

4、createNewFile,delete,deleteOnExit

先创造出一个文件,使用createNewFile方法,代码如下:

public class IODemo4 {
    public static void main(String[] args) throws IOException {
        File f = new File("./test.txt");
        boolean ret1 = f.createNewFile();//根据 File对象,⾃动创建⼀个空⽂件。成功创建后返回 true
        System.out.println(ret1);
    }
}

执行代码前:

执行代码后:

多了test.txt文件

delete方法删除test.txt文件,代码如下:

public class IODemo4 {
    public static void main(String[] args) throws IOException {
        File f = new File("./test.txt");
        boolean ret1 = f.createNewFile();//根据 File对象,⾃动创建⼀个空⽂件。成功创建后返回 true
        System.out.println(ret1);
        boolean ret = f.delete();//根据 File 对象,删除该⽂件。成功删除后返回 true 
        System.out.println(ret);
    }
}

执行结果:

test.txt文件没有了。

deleteOnExit方法,在程序执行完后才会删除指定的文件,代码如下:

public class IODemo4 {
    public static void main(String[] args) throws IOException, InterruptedException {
        File f = new File("./test.txt");
        boolean ret1 = f.createNewFile();//根据 File对象,⾃动创建⼀个空⽂件。成功创建后返回 true
        System.out.println(ret1);//根据 File 对象,标注⽂件将被删除,删除动作会到 JVM 运⾏结束时才会进⾏
        f.deleteOnExit();
        Thread.sleep(5000);
    }
}

执行前:

有test.txt文件。

执行后:

过5秒后才会删除test.txt文件。

5、list,listFiles,mkdir,mkdirs,renameTo方法

list:

代码如下:

public class IODemo5 {
    public static void main(String[] args) {
        File f = new File(".");
        String[] files = f.list();//返回 File 对象代表的⽬录下的所有⽂件名
        System.out.println(Arrays.toString(files));
    }
}

执行结果:

listFiles:

代码如下:

public class IODemo5 {
    public static void main(String[] args) {
//        String[] files = f.list();//返回 File 对象代表的⽬录下的所有⽂件名
//        System.out.println(Arrays.toString(files));
        File f = new File(".");
        File[] files = f.listFiles();//返回File对象代表的⽬录下的所有⽂件,以File对象表⽰
        System.out.println(Arrays.toString(files));
    }
}

执行结果:

mkdir:

代码如下:

public class IODemo6 {
    public static void main(String[] args) {
        File f = new File("./aaa");//创建 File 对象代表的⽬录
        boolean ret1 = f.mkdir();
        System.out.println(ret1);
    }
}

执行前:

执行后:

多出了aaa目录。

mkdirs:

代码如下:

public class IODemo7 {
    public static void main(String[] args) {
        File f = new File("./aaa/bbb/ccc");//创建 File 对象代表的⽬录,如果必 要,会创建中间⽬录
        boolean ret = f.mkdirs();
        System.out.println(ret);
    }
}

执行前:

执行后:

当前目录下多了aaa/bbb/ccc。

renameTo:

代码如下:

public class IODemo8 {
    public static void main(String[] args) {
        File src = new File("./test2.txt");
        File dest = new File("./test.txt");
        src.renameTo(dest);//进⾏⽂件改名,也可以视为我们平时的剪切、粘贴操作
    }
}

执行前:

文件名是test.txt。

执行后:

文件名是test2.txt。

除重命名功能外,renameTo还有移动功能(移动比复制、粘贴效率高,前提是在同一硬盘上)。

相关文章
|
1月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
143 5
|
1月前
|
网络协议 安全 Java
实现Java语言的文件断点续传功能的技术方案。
像这样,我们就完成了一项看似高科技、实则亲民的小工程。这样的技术实现不仅具备实用性,也能在面对网络不稳定的挑战时,稳稳地、不失乐趣地完成工作。
56 0
|
4月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
7月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
1485 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
4月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
168 23
|
5月前
|
存储 网络协议 Linux
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
219 34
|
5月前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
5月前
|
Java API 数据处理
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
126 4
|
5月前
|
缓存 网络协议 Java
JAVA网络IO之NIO/BIO
本文介绍了Java网络编程的基础与历史演进,重点阐述了IO和Socket的概念。Java的IO分为设备和接口两部分,通过流、字节、字符等方式实现与外部的交互。
169 0
|
7月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
223 34