IO流笔记

IO流(一)


首先IO流是什么:

首先流是什么:流是指一连串流动的字符,字符从硬盘到内存或者从内存到硬盘传输形态
I:In – 输入
O:Out – 输出
IO流是站在程序(内存)的角度来判别的,并不是站在文件(硬盘)的角度判别的


流的常见分类

按照方向区分流:
  1. 输入流:InputStream和Reader为基类
  2. 输出流:OutputStream和Writer为基类
按照单位区分流:
  1. 字节流:
    ① 字节输入流:InputStream基类
    ② 字节输出流:OutputStream基类
  2. 字符流:
    ① 字符输入流:Reader基类
    ② 字符输出流:Writer基类
  3. 两者的区别:
    ① 字节流的单位是字节,而字符流的单位是字符
    ② 字节流能处理所有类型的数据(如图片、avi等),但是字符流只能处理字符类型的数据
按照功能区分流:
  1. 基础流:
  2. 处理流:

IO流的相对路径与绝对路径

相对路径:

public static void main(String[] args) {
	File file = new File("修改");
	System.out.println(file.getAbsolutePath());
}
//输出的结果为:D:\Web\My\修改

绝对路径:

public static void main(String[] args) {
	File file = new File("D:\\软件备份\\修改");
	System.out.println(file);	
}
//输出结果:D:\软件备份\修改

两者的区别:相对路径是相对于程序的工作空间而言,绝对路径是直接指向硬盘地址
解释:如果读取的文件是在绝对路径中,那么其他得到该段代码的人有可能就访问不到该文件,但是用相对路径则解决了这个问题的出现


IO流的基础用法

获取文件信息:

public static void main(String[] args) {
	File file = new File("D:\\软件备份\\修改\\01.jpg");

	//获取数据
	System.out.println("获取绝对路径:" + file.getAbsolutePath());
	System.out.println("获取文件名:" + file.getName());
	System.out.println("获取文件是否可读:" + file.canRead());
	System.out.println("获取文件是否可写:" + file.canWrite());
	System.out.println("获取文件是否隐藏:" + file.isHidden());
	System.out.println("获取文件大小:" + file.length());
	
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
	
	String format = sdf.format(file.lastModified());
	System.out.println("获取文件最后修改时间:" + format);
}

程序向硬盘中写入文件时:
① 当文件直接在根目录下:

public static void main(String[] args) {
	File file = new File("test.txt");
	if(!file.exists()) {	//判断相对路径下是否有该文件
		try {
			file.createNewFile();	//如果没有则执行创建文件的代码
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

② 当将内容写入某个(多个)文件夹下:

public static void main(String[] args) {
	File file = new File("file\\test.txt");
	//获取该文件的父类
	File parentFile = file.getParentFile();
	if(!parentFile.exists()) {
		parentFile.mkdirs();
	}
	if(!file.exists()) {	//判断是否有该文件
		try {
			file.createNewFile();	//如果没有则创建文件
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

注:mkdirs()mkdir()的区别:前者可以创建多个子文件夹,后者只能创建一个文件夹,通常在项目中我们不知道文件存储在几级文件夹下,所以通常使用mkdirs()这个

但是如果在读取的时候发现路径中不存在要读取文件的时候,则会报错

获取某个文件夹下所有的文件(名):

public static void main(String[] args) {
	File file = new File("C:\\Users\\32060\\Desktop");	
	String[] list = file.list();//用数组存放获取到的文件	
	for (String str : list) {	//用遍历输出数组中的内容
		System.out.println(str);
	}	
}

获取某个文件夹下所有文件指定信息(全部信息):

public static void main(String[] args) {
	File file = new File("C:\\Users\\32060\\Desktop");	
	File[] list = file.listFiles();	
	for (File f : list) {
		System.out.println(f.getName() + "---" + f.length());//获取文件名和文件长度
	}
}

获取某个文件夹下所有包含指定内容的文件:

public static void main(String[] args) {
	File file = new File("C:\\Users\\32060\\Desktop");
	File[] list = file.listFiles();
	for (File f : list) {
		if(f.getName().endsWith(".txt") && f.isFile()) {	//判断文件名是.txt并且不是文件夹的文件
			System.out.println(f.getName()+ "--" + f.length());
		}
	}
}

此处判断方法是.endsWith()而不是.equals()方法

注:微末见解,尚在进步,如有不对,还望指出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值