2021-04-16

一, File
–1,概述
IO技术主要用来解决 Java程序和文件系统的交互
I是指 从磁盘读取数据到Java程序中 的过程-in
O是指 从Java程序中输出到磁盘 的过程-out
两个过程都是相对Java程序而言
由于你操作数据的单位不同txt/jpg/mp4…分为两种流:字节流/字符流
字节流可以读写任何单位的数据 – 重点!!!
字符流 只可以读写txt的数据 – 了解!!!
–2,创建对象
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
–3,调用方法
package cn.tedu.api;

	import java.io.File;
	import java.io.IOException;
	import java.util.Arrays;

	//测试 File
	public class Test1 {
		public static void main(String[] args) throws IOException {
			//1,创建对象--参数是文件所在的路径
			File file = new File("E:\\iotest\\1.txt");
			//2,调用方法
			System.out.println( file.length() );//获取字节量
			System.out.println( file.exists() );//判断文件是否存在
			System.out.println( file.isFile() );//判断是文件吗
			System.out.println( file.isDirectory() );//判断是文件夹吗
			System.out.println( file.getName() );//获取文件名
			System.out.println( file.getParent() );//获取父路径
			System.out.println( file.getAbsolutePath() );//获取完整路径
			file = new File("E:\\iotest\\2.txt");
			System.out.println( file.createNewFile() );//创建新文件
			file = new File("E:\\iotest\\a");
			System.out.println(file.mkdir());//创建新文件夹
			file = new File("E:\\iotest\\x\\y");
			System.out.println(file.mkdirs());//创建新多个 文件夹
			System.out.println(file.delete());//删除文件或者空的文件夹
			
			//TODO 文件夹列表
			file = new File("E:\\iotest");
			String[] s = file.list();//列出资源的名字
			//[1.txt, 2.txt, a, x]
			System.out.println( Arrays.toString(s) );
			
			//列出文件夹里的所有资源,并把每个资源封装成File
			File[] files = file.listFiles();
	//[E:\iotest\1.txt, E:\iotest\2.txt, E:\iotest\a, E:\iotest\x]
			System.out.println( Arrays.toString(files) );
			
			//TODO 模拟File[]
			File[] b = new File[3];
			b[0] = new File("E:\\iotest\\2.txt") ;
			b[1] = new File("E:\\iotest\\1.txt") ;
			b[2] = new File("E:\\iotest\\20.txt") ;
			for (int i = 0; i < b.length; i++) {//遍历数组
				System.out.println(b[i]);//打印数组里的每个File
				System.out.println(b[i].getName());//打印每个File名
			}
			
			//TODO 列出文件夹里的所有资源,打印文件夹名称,统计所有文件的大小
			//1.列出所有资源listFiles()
			File dir = new File("E:\\iotest");
			File[] a = dir.listFiles();
			long sum = 0;//定义变量,记录文件的大小
			//遍历数组,获取每个File类型的资源,a[i]
			for(int i = 0 ; i < a.length ;i++) {
				//2.判断,资源是文件夹吗?-- getName()
				if( a[i].isDirectory() ) {
					System.out.println(a[i].getName());
				}if( a[i].isFile() ) {
					//3.判断,资源是文件吗?--求大小
					sum = sum + a[i].length();
				}
			}
			System.out.println("文件夹是: "+dir.getAbsolutePath()
									+",里面的文件大小是: "+sum);
		}
	}


--4,递归
	现象:方法里调用方法本身
	好处:减少了代码
	坏处:费内存
	package cn.tedu.api;

	import java.io.File;
	import java.util.Scanner;

	//测试 递归
	public class Test2 {
		public static void main(String[] args) {
			//1,自定义目录路径
			System.out.println("请输入文件夹 的路径:");
			String path = new Scanner(System.in).nextLine();
			//2,封装成File 
			File dir = new File(path);
			//3,调用方法,求总大小
			long sum = sizeOf(dir);
			System.out.println("文件夹是: "+path+",总大小是:"+sum);
		}
		//定义方法,求总大小
		public static long sizeOf(File dir) {
	//		1,列出文件夹里的所有资源 listFiles()
			File[] a = dir.listFiles();
			long sum = 0 ;//定义变量,记录总和
	//		2,遍历获取每个资源a[i]
			for (int i = 0; i < a.length; i++) {
	//		3,判断,如果资源是文件,求大小length()
				if(a[i].isFile()) {
					sum = sum + a[i].length() ;
				}else if(a[i].isDirectory()) {
	//		4,判断,如果资源是文件夹
	//				//重复的执行1 2 3 --递归
					sum = sum + sizeOf(a[i]);//--递归
				}
			}
			return sum ;//返回计算的结果sum
		}
		
	}

二,读取流
–1,概述
用来读取 磁盘里的数据 -in
字符流只能读字符文件–了解
字节流可以读各种文件–重点
InputStream - FileInputStream - BufferedInputStream
–2,工具类
- InputStream:是父类,被修饰为了抽象类。不能被new,学习共性方法。
abstract int read() 从输入流中读取数据的下一个字节。
int read(byte[] b)
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中
int read(byte[] b, int off, int len)
将输入流中最多 len 个数据字节读入 byte 数组。
void close()
关闭此输入流并释放与该流关联的所有系统资源。
- FileInputStream:是子类,可以使用父类的方法,研究new
FileInputStream(String name)
FileInputStream(File file)
- BufferedInputStream:是子类,可以使用父类的方法,研究new
BufferedInputStream(InputStream in)
创建一个 BufferedInputStream 并保存其参数
–3,测试
package cn.tedu.api;

	import java.io.BufferedInputStream;
	import java.io.File;
	import java.io.FileInputStream;
	import java.io.FileNotFoundException;
	import java.io.IOException;
	import java.io.InputStream;

	//测试 读取流
	public class Test3 {
		public static void main(String[] args) throws IOException {
	//		method();//FileInputStream读取
			method2();//BufferedInputStream读取
		}
		//BufferedInputStream读取
		public static void method2() throws IOException {
			//1,创建多态对象
			InputStream in = new BufferedInputStream(
									new FileInputStream(
											"E:\\iotest\\1.txt"));
			//2,读取数据
			int b = 0 ;//定义变量,记录读到的数据
			while( ( b = in.read() ) != -1) {
				System.out.println(b);
			}
			//3,关闭资源
			in.close();
		}
		//FileInputStream读取
		public static void method() throws IOException {
			//1,创建多态对象
	InputStream in = new FileInputStream("E:\\iotest\\1.txt");//触发String构造方法
	//		File file = new File("E:\\iotest\\1.txt");
	//InputStream in2 = new FileInputStream(file);//触发File构造方法
	//InputStream in3 = new FileInputStream(new File("E:\\iotest\\1.txt"));//触发File构造方法
			//2,读取数据
	//		int data = in.read();//一个一个的读
	//		System.out.println(data);
	//		System.out.println(in.read());
	//		System.out.println(in.read());
	//		//问题2:read()的默认返回值是int类型,非要得到char--强转
	//		char x = (char)data;
	//		System.out.println(x);
	//		//问题1:没数据了,还能读吗?-永远返回-1
	//		System.out.println(in.read());
			//TODO 改造
			int b = 0 ;//定义变量,用来记录读到的数据
			//read()没数据时,会永远返回-1
			while( ( b = in.read() ) != -1){
				//打印读到的数据
				System.out.println(b);
			}
			//3,关闭资源
			in.close();
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值