零基础学Java第二十天之IO流

IO流

概念

I ---- in – 输入(将外界的数据传入到程序中)

O – out – 输出(将程序中的数据传出到外界)

流 – 一点点的传输

注意:站在程序的角度理解输入输出

分类

按照方向分:输入流、输出流

按照单位分:字节流、字符流

按照功能分:节点流/基础流、处理流

注意:处理流往往是包含着节点流,让流的功能更加强大 – new 处理流(new 基础流);

存储单位进制

1024byte = 1Kb

1024Kb = 1Mb

1024Mb = 1Gb

1024G = 1Tb

1024Tb = 1Pb

注意:每年10月24日是程序员节

学习路线及经验

  1. 按照流的发展历史学习
  2. 关注继承关系
  3. 举一反三

字节流

abstract class InputStream – 字节输入流(字节流的基类)

abstract class OutputStream – 字节输出流(字节流的基类)

class FileInputStream extends InputStream – 文件字节输入流

class FileOutputStream extends OutputStream – 文件字节输出流

class FilterInputStream extends InputStream - 过滤器字节输入流

class FilterOutputStream extends OutputStream - 过滤器字节输出流

class BufferedInputStream extends FilterInputStream - 带缓冲区的字节输入流

class BufferedOutputStream extends FilterOutputStream - 带缓冲区的字节输出流

缓冲区大小:8192字节

1、使用

1、文件的写入

package com.xx.io01;

import java.io.FileOutputStream;
import java.io.IOException;

public class Test01 {
	/**
	 * 
	 * 1)不处理异常的方式
	 * 2)文件存在的情况
	 */
	public static void main(String[] args) throws IOException {
		
		//1.创建流对象
		FileOutputStream fos = new FileOutputStream("xx.txt");
		
		//2.写入数据
		//fos.write(97);//写入Unicode码
		//fos.write("123abc".getBytes());//写入字节数组
		fos.write("123abc".getBytes(), 1, 3);//写入字节数组,偏移量,写入长度
		
		//3.关闭资源
		fos.close();
		
	}
}

2、处理异常的情况

package com.xx.io01;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test02 {
	/**
	 * 
	 * 1)不处理异常的方式
	 * 2)文件存在的情况
	 * 3)在末尾追加
	 * 		经验:考虑基础流的构造方法
	 * 4)文件不存在的情况
	 * 		经验:所有的输出流,当文件不存在时都会先创建该文件,再写入数据
	 * 5)处理异常的方式
	 */
	public static void main(String[] args) {
		
		FileOutputStream fos = null;
		
		try {
			//1.创建流对象
			fos = new FileOutputStream("xx.txt",true);
			//2.写入数据
			fos.write("123abc".getBytes());//写入字节数组
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//3.关闭资源
			if(fos != null){
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

3、读取数据-复杂版

package com.xx.io01;

import java.io.FileInputStream;
import java.io.IOException;

public class Test03 {
	/**
	 * 知识点:利用 文件字节输入流 读取文件里的数据
	 * 
	 *  1)不处理异常的方式
	 *  2)文件存在的情况
	 */
	public static void main(String[] args) throws IOException {
		
		//1.创建流对象
		FileInputStream fis = new FileInputStream("xx.txt");
		
		//2.读取数据
		//read():读取一个字节,读取到文件末尾返回-1
		int read = fis.read();
		System.out.println((char)read);
		read = fis.read();
		System.out.println((char)read);
		read = fis.read();
		System.out.println((char)read);
		read = fis.read();
		System.out.println((char)read);
		read = fis.read();
		System.out.println((char)read);
		read = fis.read();
		System.out.println((char)read);
		read = fis.read();
		System.out.println(read);
		
		
		//3.关闭资源
		fis.close();
		
	}
}

4、读取数据-简化版

package com.xx.io01;

import java.io.FileInputStream;
import java.io.IOException;

public class Test04 {
	/**
	 * 
	 *  1)不处理异常的方式
	 *  2)文件存在的情况
	 */
	public static void main(String[] args) throws IOException {
		
		//1.创建流对象
		FileInputStream fis = new FileInputStream("xx.txt");
		
		//2.读取数据
		//read():读取一个字节,读取到文件末尾返回-1
		int read;
		while((read = fis.read()) != -1){
			System.out.println((char)read);
		}
		
		//3.关闭资源
		fis.close();
		
	}
}

5、将数据存入数组,返回读取到的有效字节

package com.xx.io01;

import java.io.FileInputStream;
import java.io.IOException;

public class Test05 {
	/**
	 * 知识点:利用 文件字节输入流 读取文件里的数据
	 * 
	 *  1)不处理异常的方式
	 *  2)文件存在的情况
	 */
	public static void main(String[] args) throws IOException {
		
		//1.创建流对象
		FileInputStream fis = new FileInputStream("xx.txt");
		
		//2.读取数据
		//read(bs):读取bs数组长度的数据并把数据存入数组中,返回读取到的有效字节数。如果读取到文件末尾,则返回-1
		byte[] bs = new byte[1024];//[0,0,0,0,0,0,....]
		int len;
		len = fis.read(bs);
		System.out.println(new String(bs, 0, len));
		
		//3.关闭资源
		fis.close();
		
	}
}

6、try-catch处理文件

package com.xx.io01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Test06 {
	/**
	 * 知识点:利用 文件字节输入流 读取文件里的数据
	 * 
	 *  1)不处理异常的方式
	 *  2)文件存在的情况
	 *  3)文件不存在的情况
	 *  	经验:
	 *  		所有的输出流,当文件不存在时都会先创建该文件,再写入数据
	 *  		所有的输入流,当文件不存在时都会报错 - FileNotFoundException
	 *  4)处理异常的方式
	 */
	public static void main(String[] args) {
		
		
		FileInputStream fis = null;
		try {
			//1.创建流对象
			fis = new FileInputStream("hhy.txt");
			
			//2.读取数据
			//read(bs):读取bs数组长度的数据并把数据存入数组中,返回读取到的有效字节数。如果读取到文件末尾,则返回-1
			byte[] bs = new byte[1024];//[0,0,0,0,0,0,....]
			int len;
			while((len = fis.read(bs)) != -1){
				System.out.println(new String(bs, 0,len));
			}
			
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			//3.关闭资源
			if(fis != null){
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
}

7、利用 带缓冲区的字节输入流 读取文件里的数据

package com.xx.io02;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class Test02 {
	/**
	 * 知识点:利用 带缓冲区的字节输入流 读取文件里的数据
	 * 
	 *  1)不处理异常的方式
	 *  2)文件存在的情况
	 *  3)文件不存在的情况
	 *  	经验:
	 *  		所有的输出流,当文件不存在时都会先创建该文件,再写入数据
	 *  		所有的输入流,当文件不存在时都会报错 - FileNotFoundException
	 *  4)处理异常的方式
	 */
	public static void main(String[] args) throws IOException {
		
		//1.创建流对象
		//BufferedInputStream fis = new BufferedInputStream(new FileInputStream("hhy.txt"));
		
		//1.创建流对象 + 自定义缓冲区大小
		BufferedInputStream fis = new BufferedInputStream(new FileInputStream("hhy.txt"),2048);
		
		//2.读取数据
		byte[] bs = new byte[1024];
		int len;
		while((len = fis.read(bs)) != -1){
			System.out.println(new String(bs, 0, len));
		}
		
		//3.关闭资源
		fis.close();
		
	}
}

8、利用 带缓冲区的字节输出流 向文件写入数据

package com.xx.io02;

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

public class Test01 {
	/**
	 * 知识点:利用 带缓冲区的字节输出流 向文件写入数据
	 * 
	 *  1)不处理异常的方式
	 * 	2)文件存在的情况
	 * 	3)在末尾追加
	 * 		经验:考虑基础流的构造方法
	 * 	4)文件不存在的情况
	 * 		经验:所有的输出流,当文件不存在时都会先创建该文件,再写入数据
	 * 	5)处理异常的方式
	 */
	public static void main(String[] args) throws IOException{
		
		//1.创建流对象
		//BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("hhy.txt"));
		
		//1.创建流对象 + 末尾追加
		//BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("hhy.txt",true));
	
		//1.创建流对象 + 自定义长度
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("hhy.txt"),2048);
				
		
		//2.写入数据
		bos.write("123abc".getBytes());
		bos.write("123abc".getBytes());
		
		//3.关闭资源
		bos.close();
	}
}

9、文件的下载

1、读取源文件,写入目标文件
package com.xx.io01;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Copy01 {
	/**
	 * 知识点:拷贝文件
	 * 
	 * 思路:读取源文件,写入目标文件
	 */
	public static void main(String[] args) throws IOException {
		
		FileInputStream fis = new FileInputStream("源文件.mp4");
		FileOutputStream fos = new FileOutputStream("copy.mp4");
		
		int read;
		while((read = fis.read()) != -1){
			fos.write(read);
		}
		
		fis.close();
		fos.close();
	}
}

2、进阶版
package com.qf.io02;

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

public class Copy {

	public static void main(String[] args) throws IOException {
		
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream("源文件.mp4"));
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.mp4"));
		
		byte[] bs = new byte[1024];
		int len;
		while((len = bis.read(bs)) != -1){
			bos.write(bs, 0, len);
		}
		
		bis.close();
		bos.close();
	}
}

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值