DAY18:尚学堂高琪JAVA(145~150)IO原理,字节流及字符流

IO原理及字节流

//147
一:概念
流:从一端到另一端,源头与目的地
二:IO流分类
1.流向:输入流和输出流
2.数据:字节流:二进制,可以一切文件(文本,音视频)
字符流:文本文件
3.功能:
节点流:包裹源头
处理流:增强功能,提高性能
三:字节流
字节流:以字节为单位获取数据
输入流:InputStream 常用方法:read(byte[] b),read(byte[] b,int off,int len),close()
FileInputStream()
输出流:OutputStream 常用方法:write(byte[] b),write(byte[] b,int off,int len),flush(),close()
FileOutputStream()

四:操作
读文件
1.建立联系---------Flie文件 源头
2.选择流------------文件输入流 InputStream FileInputStream()
3.操作 数组大小 read------byte[] car=new byte[1024]; read 输出
4.释放资源------------关闭

写文件
1.建立联系---------Flie文件 目的地
2.选择流------------文件输出流OuputStream FileuOuputStream()
3.操作------------write(),flush
4.释放资源------------关闭

InputStream和OuputStream

package io;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
//147
public class ByteIo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//建立联系 File对象
		File src=new File("H:/1/1.txt");
		//选择流
		InputStream is1=new FileInputStream(src);
		//读取操作(缓冲数组)
		byte[] car=new byte[1024];
		int len=0;//接收实际读取大小
		//循环读取
		while (-1!=(len=is1.read(car))) {//read()从输入流到数组
		//输出  字节数组转为字符串
			String info=new String(car,0, len);
			System.out.println(info);
			
		}
		if (null!=is1) {
			is1.close();
		}
	}

}

在这里插入图片描述

package io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
//147
public class ByteIo02 {
	public static void main(String[] args) throws IOException {
		File dest=new File("H:/1/2.txt");
		OutputStream os1=new FileOutputStream(dest,true);
		String s1="This is writen by lzk.";
		//字符串转字节数组
		byte[] data=s1.getBytes();
		os1.write(data, 0, data.length);//write()从数组到输出流
		os1.flush();//强制刷新出去
		os1.close();
	}

}

文件拷贝
1.建立联系---------Flie文件 源头 目的地
2.选择流------------文件输入流 InputStream FileInputStream()
和输出流文件输出流OuputStream FileuOuputStream()
3.操作 数组大小 read------byte[] car=new byte[1024];
int len=0;
whlie(-1!=(len=输入流.read(car))){
输出流.write(car,0,car.length)
}
flush()
4.释放资源------------关闭

 package io;
//148 文件复制
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class ByteIo03Copy {
	public static void main(String[] args) throws IOException {
		String src="H:/1/1.jpg";
		String dest="H:/1/3.jpg";
		FileCopy(src, dest);
	}
	public static void FileCopy(String srcPath,String destString) throws IOException{
		// 1
		File src=new File(srcPath);
		File dest=new File(destString);
		if (!src.isFile()) {
			System.out.println("只能拷贝文件");
		}
		//2
		InputStream is1=new FileInputStream(src);
		OutputStream os1=new FileOutputStream(dest);
		//3
		byte[] car=new byte[1024];
		while (-1!=(is1.read(car, 0, car.length))) {
			os1.write(car, 0, car.length);
		}
		//4
		os1.flush();
		os1.close();
		is1.close();
	}
}

文件夹拷贝
1.递归查找子孙级文件,文件夹
2.文件 复制(IO流复制)
文件夹 创建

package io;
/*
 * 149 文件夹复制
 * 1.文件复制 copyDir
 * 2.文件创建 makedirs()
 * 3.递归查找子孙
 * */
import java.io.File;
import java.io.IOException;

public class CopyFile {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		String srcPath="H:/1";
		String destPath="H:/2";
		
		File src=new File(srcPath);
		File dest=new File(destPath);
		if (src.isDirectory()) {//如果是文件夹
			dest=new File(destPath,src.getName());
			
		}
		ByteIo03Util.copyDir(src,dest);
	}

}

public static void copyDir(File src, File dest) throws IOException {
		if(src.isFile()){
			ByteIo03Util.FileCopy(src,dest); 
		}
		else if(src.isDirectory()){
			//确保目标文件夹存在
			dest.mkdir();
			for(File temp:src.listFiles()){
				copyDir(temp, new File(dest, temp.getName()));
			}
		}
	}

字符流

字符流:以字符为单位获取数据
输入流:Reader常用方法:read(char[] cbuf),read(char[] cbuf,int off,int len),close()
FileReader()
输出流:Writer常用方法:write(char[] cbuf),write(char[] cbuf,int off,int len),flush(),close()
FileWriter()
Reader FileReader
Writer FileWriter
一:纯文本读取
1.建立联系
2.选择流------------Reader FileReader
3.读取 -----char[] car=new byte[1024]
4.释放资源------------关闭
二:纯文本写出
1.建立联系
2.选择流------------Writer FileWriter
3.读取 -----writer(car,0,len)
write(str);
4.释放资源------------关闭

package chario;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
/*
 * 151 纯文本复制
 * */
public class CopyFile {

	public static void main(String[] args) throws IOException {
		File src=new File("H:/1/1.txt");
		File dest=new File("H:/1/5.txt");
		
		Reader r1=new FileReader(src);
		Writer w1=new FileWriter(dest);
		
		char[] car=new char[1024];
		int len=0;
		while (-1!=(len=r1.read(car))) {
			 w1.write(car,0,len);
		}
		
		w1.flush();
		w1.close();
		if(r1!=null){
			r1.close();
		}
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值