I/O字符流和字节流复制文件

本文探讨了Java中字符流和字节流的区别,指出字符流适用于处理文本,而字节流则更为通用。文章列举了9种复制文件的方法,并强调了使用缓冲提高效率的重要性。此外,还介绍了如何通过InputStreamReader和OutputStreamWriter进行字符流与字节流之间的转换,以应对数据持久化和网络传输的需求。参考链接提供了更多关于Java Io字符流与字节流区别的详细内容。
摘要由CSDN通过智能技术生成

字符流和字节流复制文件的9种方法及测试效率

一、字符流字节流区别:
操作的单位不一样,一个是字节[byte-8bit],一个是字符[变长字节]
操作中文的时候使用字符流更方便 字节流更广泛:文本,视频,音频,图片…
使用缓冲Buffer以后:效率明显提高

二、9种方法


public class java_IO {
	static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		
		long start=System.currentTimeMillis();//系统当前时间
		long end=System.currentTimeMillis(); 
		System.out.println("所用时间:"+(end-start)+"ms"); 
	}
	
	//1.1字符流读写复制文件,每次复制一个字符:-------所用时间:21360ms
	public static void copyFileChar(){
		System.out.println("请输入你需要拷贝的文件路径:");
		String oldPath = sc.next();
		System.out.println("请输入你拷贝到的文件路径:");
		String newPath = sc.next();
		FileReader fileReader = null;
        FileWriter fileWriter = null;
        try{
            fileReader = new FileReader(oldPath);
            fileWriter = new FileWriter(newPath);
            int red;
            while((red = fileReader.read()) != -1){//读取单个字符,-1代表已达到流的末尾
                fileWriter.write(red);//写入单个字符
            }
        	System.out.println(oldPath+"文件拷贝完毕!");
            fileWriter.flush();
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(null != fileReader){
                try{
                    fileReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != fileWriter){
                try{
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
	
	
	//2.2字符流读写复制文件,每次复制一个字符数组:----所用时间:10534ms
	public static void copyFileReaderArray(){
		System.out.println("请输入你需要拷贝的文件路径:");
		String oldPath = sc.next();
		System.out.println("请输入你拷贝到的文件路径:");
		String newPath = sc.next();
		FileReader Reader = null;
        FileWriter Writer = null;
        try{
            Reader = new FileReader(oldPath);
            Writer = new FileWriter(newPath);
            char[] charArray = new char[1024];//缓冲数组
            int readLength;//每次读取的长度
            
            while((readLength = Reader.read(charArray)) != -1){
                Writer.write(charArray,0,readLength);//写入读取的字符数组.
            }
            Writer.flush();
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(null != Reader){
                try{
                    Reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != Writer){
                try{
                    Writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

	//3.3缓冲字符流读写复制文件,每次复制复制一个字符:---所用时间:22119ms
	 public static void copyFileBufferedReaderChar(){
	        System.out.println("请输入你需要拷贝的文件路径:");
	        String oldpath=sc.next();	
	        System.out.println("请输入你拷贝到的文件路径:");
	        String newpath=sc.next();
		    FileReader Reader = null;
	        FileWriter Writ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值