【javase高级-IO流复习】

本文主要复习了Java中的File类及其常用方法,包括创建、删除目录和文件,以及遍历文件夹。接着,详细介绍了IO流的原理、分类和体系结构,特别是节点流的使用,如文本和非文本文件的复制。还探讨了缓冲流提高效率的机制,转换流的作用,以及标准输入输出流、打印流和数据流的应用。最后,给出了一个实际的练习,即如何实现图片的加密与解密复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.File

File 是文件或者文件夹

1.1常用方法

//创建文件类
		File  file = new File("C:\\Users\\Administrator\\Desktop\\aa");
		//判断文件是否可执行,可读,可写;返回值为Boolean值;
		System.out.println(file.canExecute()+"\t"+
		file.canRead()+"\t"+file.canWrite());
		//返回此路径名的绝对路径名形式。
		System.out.println(file.getAbsoluteFile());
		//返回此路径名的绝对路径名字符串。
		System.out.println(file.getAbsolutePath());
		//返回此路径名的路径名字符串;
		System.out.println(file.getPath());
		//返回此路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
		System.out.println(file.getParent());
		//返回此路径名父目录的路径名,如果不存在父目录,则返回null;
		System.out.println(file.getParentFile());

在这里插入图片描述
mkdir()创建指定目录
mkdirs() 创建指定目录,包含必须但不存在的父目录;
isDirectory() 判断是否是一个文件夹
exists()判断文件是否存在;
isFile()判断是否是一个文件;
length()返回该路径名所代表的文件的长度;
list() 返回一个字符串数组,这些字符串是此路径名表示的目录中的文件和目录的名字。
返回的是String的数组;
listFiles();返回的是File数组;是此路径名表示的目录中的文件和文件夹;

public static void main(String[] args) {
   
		File file = new File("C:\\Users\\Administrator\\Desktop");
		String[] list1 = file.list();
		for(String list:list1) {
   
			System.out.println(list);
		}
	}

在这里插入图片描述

File file = new File("C:\\Users\\Administrator\\Desktop");
		File[] list2 = file.listFiles();
		for(File list:list2) {
   
			System.out.println(list);
		}

在这里插入图片描述

当所给路径不是文件夹,创建文件夹,若存在删除文件夹,

package com.openlab.pp;

import java.io.File;
import java.io.IOException;

public class TestFile {
   
	public static void main(String[] args) {
   
		File  file = new File("C:\\Users\\Administrator\\Desktop\\aa");
		if(!file.exists()) {
   
			//创建多级目录;
			file.mkdirs();
			
		}else{
   
			file.delete();//注意删除是不放回回收站的,所以要谨慎使用;
			System.out.println("删除成功");
		}
	}
}

在这里插入图片描述在这里插入图片描述
判断所给是否为文件,若不是,判断父目录是否存在,不存在则创建,再创建文件,若是文件 则删除文件;

File  file = new File("C:\\Users\\Administrator\\Desktop\\aa\\1.txt");
		
		if(!file.isFile()) {
   
			File parents = new File(file.getParent());
			if(!parents.exists()) {
   
				//如果父目录不存在,则创建目录;
				file.mkdirs();
				System.out.println("目录创建成功");
			}
			//接着创建文件
			
			if(!file.exists()) {
   
				try {
   
					file.createNewFile();
					System.out.println(file.getName()+"创建成功");
				} catch (IOException e) {
   
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}else {
   
			file.delete();
			System.out.println("删除成功");
			//注意删除是不放回回收站的,所以要谨慎使用;
		}

注意:要想删除父目录,如果目录下还有子目录或是子文件,时不能删除的,只有它是空的才能被删除掉;

1.2将文件夹下的所有文件打印输出

public class TestFile {
   
	public static void main(String[] args) {
   
		String file = "C:\\Users\\Administrator\\Desktop";
		copyFile(file);
	}
	public static void copyFile(String path) {
   
		File file = new File(path);
		File[] files = file.listFiles();//获取到所给路径下的文件和文件夹;
		for(File list : files) {
   
			if(list.isDirectory()) {
   //利用递归将文件夹下的子孙文件输出;
				copyFile(list.getAbsolutePath());
			}else{
   
				System.out.println(list.getName());
			}
		}
	}
}

在这里插入图片描述

2.I/O流

2.1原理

I/O是input/output的缩写,I /O技术是用于处理设备之间的数据传输。例如读写文件,网络通讯等等。在Java程序中,对于数据的输入输出都是以流的方式进行操作的。Java.io包下提供了各种流的类与接口,可以获取不同种类的数据,通过标准的方法输入输出数据。
输入input:读取外部数据到内存中;
输出output:将程序(内存)中的数据输出到磁盘或光盘中。
根据不同的站位,流的方向有所不同,我们是站在程序的方向进行判断。
在这里插入图片描述

2.2流的分类

按流的操作单位分 按照流的流向分 按照流的角色分
字节流 输入流 节点流
字符流 输出流 处理流

2.3流的体系结构划分

2.3.1节点流
基类 节点流 缓冲流
InputStream FileInputStream BufferedInputStream
OutputStream FileOutputStream BufferedInputStream
Reader FileReader BufferedReader
Writer FileWriter BufferedWriter
对文件进行读取
package com.openlab.pp;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.junit.jupiter.api.Test;

public class TestRead {
   
	
	//@Test
	public  void read01() {
   
		File file = new File("E:\\EclipseWorkSpace\\zong\\src\\1.txt");//创建文件
		FileReader reader = null;
		try {
   //创建流
			reader = new FileReader(file);
			int data;//读取数据
			while((data = reader.read()) != -1) {
   
				System.out.print((char) data);
			}
		} catch (FileNot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心尘未泯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值