文件操作 和 IO 流

文件操作 和 IO 流

1.文件操作

Java 中,文件操作是基本的编程技能之一。Java 提供了丰富的文件操作方法和API,可以轻松地访问、读取、写入和操作文件。

1.1 File 类和路径问题

File 类是SUN 公司提供给程序员使用,用于操作文件和文件夹的一种方式,可以完成针对于文件和文件夹的增删改查操作。

文件路径:

​ 当需要操作文件时,需要知道它的路径,Java 中有两种文件路径,绝度路径与相对路径。

​ 绝对路径:指文件的完整路径,以文件系统根目录或磁盘盘符为基础,到指定为文件或文件夹的唯一路径。

​ Windows 操作系统是以盘符开始到目标文件或者文件夹的路径(唯一)

​ Linux/UNIX 操作系统是以 / 跟目录为起点的路径(唯一)

​ 相对路径:相对于当前目录的文件路径,即以当前路径为参照,去往其他工作目录的路径。

1.1.1 相关方法
File(String file);
	根据指定的文件路径,和 new 关键字配合实例化对应的 File 对象
        
File file = new File("D:/a/1.txt");
System.out.println(file);
File(String parent, String childName);
	根据指定的父目录路径和子文件夹的名称,和 new 关键字配合实例化对应的 File 对象

File file = new File("D:/a", "1.txt");
System.out.println(file);
File(File parent, String childName)
	根据指定的父目录 File 对象和子文件或者子文件夹的名称,和 new 关键字配合实例化对应的 File 对象

File file = new File("D:/a");
File file1 = new File(file, "1.txt");
System.out.println(file1);
1.2 文件相关操作

Java 中提供了一系列方法,用于创建、读取、写入和删除文件。

1.2.1 文件或者文件夹创建操作

文件创建操作

boolean createNewFile();
	通过 File 对象调用,创建 File 对象存储路径对应的普通文件。
	创建失败原因:
		1. 路径不合法
		2. 对应文件已存在
		3, 对应文件没有写入权限
File file = new File("1.txt");
boolean res = file.creatNewFile();
if (res) {
	System.out.println("文件创建成功");
} else {
	System.out.println("创建失败");
}

文件夹创建操作

boolean mkdir();
	通过 File 对象调用,创建 File 对象存储路径对应的文件夹
    创建失败原因:
        1. 路径不合法
        2. 对应文件已存在
        3. 对应文件夹没有写入权限
File file = new File("D:/a/b");
res = file.mkdir();
if (res) {
    System.out.println("创建成功");
} else {
    System.out.println("创建失败");
}

多层文件夹创建操作

boolean mkdirs();
	通过 File 对象调用,创建 File 对象存储路径对应的文件夹,包括中间路径
	
File file = new File("D:/a/1/2/3/4/5/6/7/8/9");
res = file.mkdirs();
if (res) {
    System.out.println("创建成功");
} else {
    System.out.println("创建失败");
}

文件移动操作

boolean renameTO(File dest);
	可以用于文件移动,重命名操作,通过 File 对象调用,将对应文件或文件夹转移到 dest

File file1 = new File("D:/a/1.txt");
File file2 = new File("D:/a/b/2.txt");
res = file1.rename(file2);
if (res) {
    System.out.println("移动成功");
} else {
    System.out.println("移动失败");
}
1.2.2 文件删除操作
boolean delete();
	通过 File 类对象调用,直接删除 File 对象对应的文件或者文件夹,要求文件夹不能有内容,必须是空文件夹。该方法要慎用,因为调用该方法删除的文件或者文件夹不会放入回收站中,而是被直接抹除数据。
        
File file = new File("D:/a/1.txt");
res = file.delete();
if (res) {
    System.out.println("删除成功");
} else {
    System.out.println("删除失败");
}        
void deleteExit();
	通过 File 类对象调用,在程序退出之后,删除 File 对象对应的文件或者文件夹,可以用于清理缓存文件,缓冲文件夹...
        
new File("D:/a/1.txt").deleteOnExit();
1.2.3 判断方法
boolean isFile();
	通过 File 类对象调用,判断是否为普通文件
File file = new File("D:/a/1.txt");
System.out.println("是否为普通文件:" + file.isFile());
boolean isDirectory();
	通过 File 类对象调用,判断是否为 文件夹
File file = new File("D:/a/1.txt");
System.out.println("是否为文件夹:" + file.isDirectory());        
boolean exists();
	通过 File 类对象调用,判断 File 类对象对应文件或者文件夹是否存在
File file = new File("D:/a/1.txt");
System.out.println("是否存在:" + file.exists());         
boolean isAbsolute();
	通过 File 类对象调用,判断是否使用【绝对路径】
File file = new File("D:/a/1.txt");
System.out.println("是否使用绝对路径:" + file.isAbsolute());       
boolean isHidden();
	通过 File 类对象调用,判断文件或者文件夹是否为隐藏文件
File file = new File("D:/a/1.txt");
System.out.println("是否为隐藏文件:" + file.isHidden());       
1.2.4 文件相关数据获取
与文件是否存在无关,仅为字符串解析方法
	String getPath();
		获取 File 类对象存储路径信息
	String getParent();
		获取 File 类对象存储路径信息的父目录
	String getName();
		获取 File 类对象存储路径信息的文件或者文件夹名
File file = new File("D:/a/1.txt");
System.out.println("Path:" + file.getPath());
System.out.println("ParentPath" + file.getParent());
System.out.println("Path:" + file.getName());
与文件存在有一定的相关性
	long length();
		通过 File 类对象调用,获取文件大小,如果是文件夹,返回值为 0L
	long lastModified();
		通过 File 类对象调用,获取文件或者文件夹的最后修改时间
	String getAbsolutePath();
		获取指定文件或者文件夹的绝对路径
	File getAbsoluteFile();
		获取指定文件或者文件夹的绝对路径对应 File 对象
File file = new File("D:/a/1.txt");
long length = file.length();
System.out.println("文件字节数:" + length);

long modified() = file.lastModified();
System.out.println(modified);

String absolutedPath = file.getAbsolutePath();
System.out.println(absolutedPath);

File absoluteFile = file.getAbsoluteFile();
System.out.println(absoluteFile);
1.2.5 文件列表方法
public static File[] listRoots();
	有且只有 Windows 有效,可以获取所有盘符信息。
Arrays.stream(File.listRoots()).forEach(System.out::println);       
String[] list();
	通过 File 类对象调用,获取对应文件夹中所有子文件或者子文件夹的名称     
System.out.println(Arrays.toString(file.list()));        
2. IO流
2.1 IO 流概述

I/O 流提供了一种处理数据的方式,数据可以通过流在应用程序和文件之间传输。Java 中的 I/O 流是通过Java API 提供的,Java IO API 提供了丰富的类库,可以对不同种类的数据进行读写操作。I/O 流解决的问题是程序到文件之间的数据传递过程,包括:文件内容操作,文件上传,文件下载等

在 Java 中,I/O 流主要被分为输入流和输出流两类。I 为 input 输入, O 为 output 输出。输入输出的参照物是当前程序占用的内存,数据从内存中离开(output), 数据读取到内存(input)

2.2 IO流分类
  1. 流向划分

    输入流 和 输出流

  2. 处理数据单位/单元

    字符流:只能操作可以使用记事本打开的普通可视化文本文件,且受到编码集约束

    ​ 可以分为:字符输入流 和 字符输出流

    字节流:使用最多,可用于文件上传,文件下载…适用于所有类型文件

    ​ 可以分为:字节输入流 和 字节输出流

2.3 文件操作字节输入流
2.3.1 相关方法
FileInputStream 构造方法
	FileInputStream(String filePath);
		根据指定的文件路径,创建对应当前文件的文件操作字节输入流对象
	FileInputStream(File file);
		根据指定的文件 File 对象,创建对应当前文件的文件操作字节输入流对象
读取操作相关方法
	int read();
		从文件中读取一个字节数据返回,返回值类型为 int 类型,实际有效数据为 byte
	int read(byte[] buffer); 【使用最多】
		从文件中读取数据到 byte 类型的缓冲数组中,返回值类型是本次读取操作存储到 byte 缓冲数组中的字节个数
	int read(byte[] buffer, int offset, int length);
		从文件中读取数据到 byte 类型的缓冲数组中,要求从 offset 下标位置开始,到 length 计数结束,返回值是读取到数组中的字节个数            
2.3.2 流程
// 1. 明确文件路径
String filePath = "D:/a/1.txt";
// 2. 创建 FileInputStream 文件操作字节输入流对象,打开文件操作输入管道
FileInputStream input = new FileInputStream(filePath);
// 3. 读取数据操作
// 3.1 创建一个 byte 类型数组
byte[] buffer = new byte[1024 * 32];
int length = -1;
// 3.2 读取数据到 buffer 数组中
while ((length = input.read(buffer)) != -1) {
    
}
// 4. 关闭资源
input.close();
2.4 文件操作字节输出流
2.4.1 相关方法
FileOutputStream 构造方法
	FileOutputStream(String filePath);
		根据指定的文件路径,创建对应当前文件的文件操作字节输出流对象
	FileOutputStream(File file);
		根据指定的文件 File 对象,创建对应当前文件的文件操作字节输出流对象
		
	FileOutputStream(String filePath, boolean append);
		根据指定的文件路径,创建对应当前文件的文件操作字节输出流对象,append 用于控制当前文件内容写入采取的是
		追加写(true)还是删除写(false)
	FileOutputStream(File file, boolean append);
		根据指定的文件 File 对象,创建对应当前文件的文件操作字节输出流对象,append 用于控制当前文件内容写入
		采取的是追加写(true),删除写为(false)
            
写入操作相关方法
	void write(int b);
		写入一个字节数据到文件中
	void write(byte[] buffer);
		写入一个字节数组数据到文件中
	void write(byte[] buffer, int offset, int length);
  		写入一个字节数组,从指定 offset 下标开始,计数字节个数 length 数据写入到文件中。            
2.4.2 流程
// 1. 明确文件路径
String filePath = "D:/a/1.txt";
// 2. 打开字节输出流管道
 FileOutputStream output = new FileOutputStream(filePath);
// 3. 字符串转 byte 类型数组
byte[] bytes = "数组".getBytes();
// 4. 写入数据到文件中
fos.write(bytes);
// 5. 关闭资源
fos.close();
2.5 文件操作字符输入流相关方法
FileReader 构造方法
	FileReader(String filePath);
		根据指定的文件路径,创建对应当前文件的文件操作字符输入流
	FileReader(File file);
		根据指定的文件 File 对象,创建对应当前文件的文件操作字符输入流对象

读取操作相关方法
	int read();
		从文件中读取一个字符数据返回,返回值类型为 int 类型,实际有效数据为 char
	int read(char[] buffer); 【使用最多】
		从文件中读取数据到 char 类型的缓冲数组中,返回值类型是本次读取操作存储到 char 缓冲数组中的字符个数
	int read(char[] buffer, int offset, int length);
		从文件中读取数据到 char 类型的缓冲数组中,要求从 offset 下标位置开始,到 length 计数结束,返回值是读取到数组中的字符个数
2.6 文件操作字符输出流相关方法
FileWriter 构造方法
	FileWriter(String filePath);
		根据指定的文件路径,创建对应当前文件的文件操作字符输出流对象
	FileWriter(File file);
		根据指定的文件 File 对象,创建对应当前文件的文件操作字符输出流对象
		
	FileWriter(String filePath, boolean append);
		根据指定的文件路径,创建对应当前文件的文件操作字符输出流对象,append 用于控制当前文件内容写入采取的是
		追加写(true)还是删除写(false)
	FileWriter(File file, boolean append);
		根据指定的文件 File 对象,创建对应当前文件的文件操作字符输出流对象,append 用于控制当前文件内容写入
		采取的是追加写(true),删除写为(false)

写入操作相关方法
	void write(int ch);
		写入一个字符数据到文件中
	void write(char[] buffer);
		写入一个字符数组数据到文件中
	void write(char[] buffer, int offset, int length);
  		写入一个字符数组,从指定 offset 下标开始,计数字符个数 length 数据写入到文件中。
  	void write(String str);
		写入一个字符串文件中
	void write(String str, int offset, int length);
  		写入一个字符串,从指定 offset 下标开始,计数字符个数 length 数据写入到文件中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值