I/O流

1. IO: input和output两个单词的缩写, input 是输入, output是输出.
	输入输出的参照物: 内存
	站在内存的角度, 数据从其他设备进入内存, 就是输入. 数据从内存进入其他设备就是输出.
2. I/O就是就是java提供的用于设备与设备之间进行数据传输的类型.
3. java中操作设备与设备之间数据传输的对象,都定义在了java.io包下. 这些类的对象都属于流对象.

字节流

字节流是可以直接操作字节的流对象,根据流向分为字节输入流(InputStream)和字节输出流(OutputStream).

在这里插入图片描述

缓冲字节输入流

InputStream 为抽象类,不能实例化,是 FileInputStream 和 BufferedInputStream 的父类.
BufferedInputStream 叫做缓冲字节输入流,读取效率比普通字节输入流 FileInputStream 高,
所以我们大多使用缓冲字节输入流来进行读取数据.
需要用到的方法:
	read:
		read();
			每次读取一个字节,返回读取到的字节内容,如果读到末尾,返回-1.
		read(byte[] b); --常用
			每次读取b数组长度个字节并储存在数组中,返回值为读取到的字节个数,如果读到末尾返回-1.
			一般b数组长度为1024的偶数倍.在缓冲流中,b数组起缓冲作用.
		read(byte[] b,int setoff,int length);
			不常用,暂时不理解.
	close();
		关流.
读取步骤:
	1.创建要读取文件的File类对象.
		File file = new File("路径");
	2.创建FileInputStream对象
		FileInputStream fis = new FileInputStream(file);
	3.创建BufferedInputStream对象
		BufferedInputStream bis = new BufferedInputStream(fis);
	前三步课可以写成一句:
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("路径")));
	4.read(byte[] b);
		先创建一个数组作为参数,然后读取,读取时数组中储存的就是读取到的字节.
	5.close();
package com.youjiuye.prictice;

import java.io.BufferedInputStream;

public class 缓冲字节输入流 {
	/*
	 1.创建File对象
	 2.创建FileInputStream对象
	 3.创建BufferedInputStream
	 4.read
	 5.close
	 */
	public static void main(String[] args) throws IOException {
		/*File file = new File("1.txt");
		FileInputStream fileInputStream = new FileInputStream(file);
		BufferedInputStream bis = new BufferedInputStream(fileInputStream);*/
		//创建缓冲输入流对象,直接写成一句代码
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("1.txt")));
		//创建一个缓存用的数组
		byte[] arr = new byte[1024*8];
		//len表示每次读取到字符的个数.
		int len;
		//当bis.read();返回值为-1时表示读取结束.
		while((len = bis.read(arr)) != -1) {
			System.out.println(new String(arr,0,len));
		}
		//记得关流
		bis.close();
	}

}

缓冲字节输出流

OutputStream 为抽象类,不能实例化,是 FileOutputStream 和 BufferedOutputStream 的父类.
BufferedOutputStream 叫做缓冲字节输出流,写出效率比普通字节输出流 FileOutputStream 高,
所以我们大多使用缓冲字节输出流来进行写出数据.
需要用到的方法:
	writa:
		write();
		每次写出一个字节到指定文件,返回值为写出的字节.
		write(byte[] b);
		写入b数组中的字节.b数组成都通常为1024的整数倍.
		write(byte[] b,int setoff,int len); --常用
		将数组b中的字节从setoff开始到第len个字节写出到指定文件.
		(write方法其实可以有两个参数,第二个参数如果是true则不删除文件内原来的数据,接着存.
		默认为false,删除存.)
	close:
		关流.
写出步骤:
	1.创建要写到文件的File类对像.
	File file = new File("路径");
	2.创建FileOutputStream对象
	FileOutputStream fos = new FileOutputStream(file);
	3.创建BufferedOutputStream对象
	BufferOutputStream bos = new BufferedOutputStream(fos);
	用一个语句完成:
	BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("路径"));
	4.write(byte[] b,int setoff,int len);
		保证都多少写多少.
	5.close;
package com.youjiuye.prictice;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class 缓冲字节输出流 {
	/*1.创建要拷贝到的文件file对象
	  2.创建FileOutputStream();
	  3.创建BufferOutputStream();
	  4.write
	  5.close
	*/
	public static void main(String[] args) throws IOException {
		/*File file = new File("2.txt");
		FileOutputStream fos = new FileOutputStream(file);
		BufferedOutputStream bos = new BufferedOutputStream(fos);*/
		//在一个语句中完成BufferedOutputStream对象的创建
		BufferedOutputStream bos = new BufferedOutputStream(
				new FileOutputStream(
					new File("2.txt"),true));
		//字符串转为byte数组
		byte[] b = "123aaa晚上吃什么".getBytes();
		//写一个数组中的全部内容
		bos.write(b);
		//关流
		bos.close();
	}

}

拷贝

package com.youjiuye.prictice;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class 缓冲字节流拷贝 {

	public static void main(String[] args) throws IOException {
		long start = System.currentTimeMillis();
		//创建BufferedInputStream和BufferedOutputStream对象
		BufferedInputStream bis = new BufferedInputStream(
				new FileInputStream(
						new File("C:\\Users\\Administrator\\Desktop\\cs1\\测试视频.wmv")));
		BufferedOutputStream bos = new BufferedOutputStream(
				new FileOutputStream(
						new File("C:\\Users\\Administrator\\Desktop\\cs2\\copy1.wmv")));
		
		//创建缓存数组
		byte[] b = new byte[1024 * 8];
		
		//创建每次读取字符个数对象
		int len;
		
		//读取多少写出多少
		while((len = bis.read(b)) != -1) {
			bos.write(b, 0, len);
		}
		
		//先开后关,后开先关
		bos.close();
		bis.close();
		
		long end = System.currentTimeMillis();
		System.out.println("time:" + (end - start));
	}

}

如果不用缓冲流,速度感人!!!

字符流

字符输入流和字符输出流的顶层父类分别为Reader和Writer, 他的两个子类普通字符流缓冲字符输出流如下图:

在这里插入图片描述

缓冲字符输入流的使用方法:
	1.创建要读取文件的File类对象.
		File file = new File("路径");
	2.创建普通字符流对象.
		FileReader fr = new FileReader(file);
	3.创建缓冲字符流对象:
		BufferedReader br = new BufferedReader(fr);
		前三步可以写在一个语句中
	4. br.read();
	5.br.close

缓冲字符输出流用法:
	1.创建要写出到文件的File类对象
	2.创建普通字符输出流对象
	3.创建缓存字符输出流对象
	4.bw.write();
	5.bw.close();

练习:

/*文本1:
	123
	asd
	zxc
copy:
	zxc
	asd
	123*/
package com.youjiuye.prictice;

import java.io.BufferedInputStream;

public class 反向拷贝 {

	public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader("C:\\Users\\Administrator\\Desktop\\cs1\\文本1.txt");
		FileWriter fw = new FileWriter("C:\\Users\\Administrator\\Desktop\\cs2\\copy.txt");
		BufferedReader buffr = new BufferedReader(fr);
		BufferedWriter buffw = new BufferedWriter(fw);
		
		ArrayList<String> list = new ArrayList<>();
		String line ;
		//读取一行
		while((line = buffr.readLine()) != null) {
			System.out.println(line);
			list.add(line);
		}
		buffr.close();
		//工具类反转方法
		Collections.reverse(list);
		for (String inString : list) {
			buffw.write(inString);
			//换行
			buffw.newLine();
		}
		buffw.close();
		
	}
}

字符流的拷贝

在这里插入代码片

properties

Properites是Hashtable的子类,所以我们Map接口接口学习所有方法,
这个类也能使用.
package com.youjiuye.study;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class Properties_修改配置文件 {

	public static void main(String[] args) throws IOException, IOException {
		//创建Properyies集合对象,用来缓存
		Properties p = new Properties();
		//读取
		p.load(new BufferedInputStream(new FileInputStream("zx.properties")));
		System.out.println(p);
		//修改集合缓存的数据
		p.setProperty("age", "24");
		//写出到指定文件
		p.store(new BufferedOutputStream(new FileOutputStream("zx.properties")), "age 修改");
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值