字节流和字符流

  • 1.字节流:

        ​ 一切文件数据在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据。
流的关闭原则:​ 先开后关,后开先关。

  • 1. 1字节输入流:

        OutputStream类定义,此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到InpuStream类某个接收器要向文件钟输出,使用FileOutputStream类

  • 1.2字节输入流:

        定义:public abstract class InputStream extends Object implements Closeable

        此抽象类是表示字节输入流的所有类的超类。

        FileInputStream从文件系统钟某个文件中获取输入字节

package zjl;

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

/*
 * 字节流:InputStream(输入流:读数据) OutputStream(输出流:写数据)  都是抽象类,不能实例化
 * 子类:FileInputStream FileOutputStream
 */

public class test {

	public static void main(String[] args) {
	InputStream	fis=null;//抽象类,不能实例化
	OutputStream fos=null;//抽象类,不能实例化
	
	try {
		fis=new FileInputStream("d:\\a.txt");//调用子类
		fos=new FileOutputStream("d:\\t.txt");
		int bt=0;
//read把数据读入数组中,并返回读取的字节数,当不等于-1时,表示读取到数据,等于-1表示文件已经读完
		while((bt=fis.read())!=-1) {
			System.out.print((char)bt);//强制转化类型,要不然看不见内容
			fos.write(bt);//输入到t.txt中,如果D盘没有a.txt和t.txt会报错
		}
		fis.close();//看完写完,要关闭
		fos.close();
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	}

}
package zijieliu;

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

public class test {
/*
 * 针对字节流字符流的读写速度慢:缓存区
 * 包装类:缓存区包装类
 * 1、字节流缓冲区包装类:BufferedInputSteam(读数据),BufferedOutputStream(写数据)
 * 字符流缓冲区包装类:
 */
	public static void main(String[] args) {
		try {
			BufferedInputStream bis=new BufferedInputStream(new FileInputStream("d:\\a.txt"));
			BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("d:\\q.txt"));
			byte[] buffer = new byte[1024];
			int len=0;
			while((len=bis.read(buffer))!=-1) {   //bis.read中read只是都长度
			System.out.print(new String(buffer,0,len));
			bos.write(buffer);
			}
			bos.flush();//刷新,一次写入数据//还可以防止出错
			bis.close();
			bos.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}
  • 2.字符流:

        字符流以字符为单位获取数据的流,称为字符流,它们都继承于Reader/Writer抽象类。常用的字符流有:

        FileReader/FileWriter,文件字符流(节点流)
        BufferedReader/BufferedWriter,字符缓存流(处理流)
        InputStreamReader/OutputStreamWriter,转换流(处理流)

package zfl;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class test {

	public static void main(String[] args) {
		try {
			FileReader fr=new FileReader("d:\\a.txt");
			FileWriter fw=new FileWriter("d:\\t.txt");
			char[] buff=new char[1024];
			int len=0;
			while((len=fr.read(buff))!=-1) {
				System.out.print(new String(buff,0,len));//调用buff数值,转为字符串,从0位读到len
				fw.write(buff);
			}
			fr.close();//关闭
			fw.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
package zifuliu;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class test {

	public static void main(String[] args) {
		try {
			BufferedReader br=new BufferedReader(new FileReader("d:\\a.txt"));
			BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\b.txt"));
			char[] buff=new char[1024];
			int len=0;
			while((len=br.read(buff))!=-1) {
				System.out.print(new String(buff,0,len));
				bw.write(buff);
			}
			bw.flush();
			br.close();
			bw.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

  • 3.字节流和字符流转换
    package zjlzfl;
    
    /*
    *转换符:InputStreamReader   OutputStreamWriter
    */
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    
    public class test {
    
    	public static void main(String[] args) {
    		try {
    			BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream("d:\\a.txt")));
    			BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\t.txt")));
    			bw.write("hello!");
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    }
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值