IO流重点知识

IO流

IO流定义:对文件的输入和输出。从内存中写入到硬盘,就是输出流;从硬盘写到内存里面,就是输入流。

字节流

以字节为单位进入输入输出流;一般操作英文、图片、视频。

字节输入流

package com.demo.day02;

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

public class FileInputStreamDemo {

	public static void main(String[] args) {
		InputStream fis = null;
		try {
			//字节流
			fis = new FileInputStream("D:\\hmj.txt");
			int data;
			//read()取到每一个字节通过Ascll转换到的数是0-255之间的整数,没有值返回-1
			while((data=fis.read())!=-1){
				//因为中文的字符可能是一个字节、两个字节,所以以字节为单位中文会乱码
				//10进制转换成对应的字符
				System.out.print((char)data);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
            //关闭流
			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

字节输出流

package com.demo.day02;

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

public class FileOutputStreamDemo {
	public static void main(String[] args) {
		
		OutputStream fos = null;
		//创建字节输出流对象
		try {
			//如果第二个参数是true,代表输出会在之前的内容尾部追加,否在覆盖
			fos = new FileOutputStream("D:\\hmj.txt",true);
			String str = "aaaa";
			//把字符串转换成字节数组
			byte[] words = str.getBytes();
			//将words.length个字节从指定的words字节数组写入此文件输出流
			fos.write(words, 0, words.length);
			System.out.println("写入成功!");
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			//关闭流
			try {
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

字符流

一般的中文可能占两个或者三个字节,以字节去输入输出可能会造成乱码,所以字符流对字符输入输出最合适。

字符输入流

package com.demo.day04;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class BufferWriterDemo {
	public static void main(String[] args) {
		Writer fr = null;
		BufferedWriter bw = null;
		try {
			//创建字符流输出对象
			fr = new FileWriter("D:\\hmj.txt",true);
			//设置BufferWrite缓存区
			bw = new BufferedWriter(fr);
			bw.write("江西南昌");
			bw.newLine();
			//刷新流
			bw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
            //关闭流
			try {
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				fr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}


字符输出流

package com.demo.day03;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class BufferReaderDemo {
	public static void main(String[] args) {
		
		Reader fr = null;
		BufferedReader br = null;
		try {
			//创建字符输入流对象
			fr = new FileReader("D:\\hmj.txt");
			//BufferedReader设置缓存区,把字符一个个取到后先放到缓存区够够一行再去获取
			br = new BufferedReader(fr);
			//获取一行数据
			String line = br.readLine();
			while(line!=null){
				//输出
				System.out.println(line);
				//新建一行数据
				line = br.readLine();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
            //关闭流
			try {
				br.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			try {
				fr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

二进制流

依赖字节流存在

package com.demo.day06;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class DdataInputStreamDemo {
	public static void main(String[] args) {
		InputStream fis = null;
		OutputStream fos = null;
		DataInputStream dis = null;
		DataOutputStream dos = null;
		try {
			//创建字节输入流
			fis = new FileInputStream("D://tu1.png");
			//创建字节输出流
			fos = new FileOutputStream("D://tu2.png");
			//依据字节流对象创建二进制输入流
			dis = new DataInputStream(fis);
			//依据字节输出流对象创建二进制输出流
			dos = new DataOutputStream(fos);
			int date;
			while((date=dis.read())!=-1){
				dos.write(date);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
            //关闭流
			try {
				dos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				dis.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			try {
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

InputStreamReader

扩充:通过InputStreamReader设置字符流的编码格式。

package com.demo.day07;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

public class InputStreamReaderDemo {
	public static void main(String[] args) {
		InputStream fis = null;
		BufferedReader br = null;
		InputStreamReader isr = null;
		try {
			fis = new FileInputStream("D:\\hmj.txt");
			//依赖字节流创建InputStreamReader流,设置编码格式
			isr = new InputStreamReader(fis,"UTF-8");
			br = new BufferedReader(isr);
			String line = br.readLine();
			while(line!=null){
				System.out.println(line);
				//进行下一行
				line = br.readLine();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
            //关闭流
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				isr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

练习

package com.demo.day05;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

public class FileDemo {
	
	public static void main(String[] args) {
		File f1 = new File("D:\\hell.txt");
		File f2 = new File("D:\\hell2.txt");
		
		/**
		 * 复制f1文件内容到f2文件
		 */
		FileOutputStream fos = null;
		FileInputStream fis = null;
		try {
			//创建输出流	
			fos = new FileOutputStream(f2);
			//创建输入流
			fis = new FileInputStream(f1);
			//创建数组
			byte words[] = new byte[1024];
			int data;
			while((data=fis.read(words))!=-1){
				//通过read(byte[] b)方法把读取的数据存入words数组
				fis.read(words);
			}
			//把words数组写入
			fos.write(words, 0, words.length);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			//关闭流
			try {
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值