2020-12-03

Java 的IO流的四大基类

IO流的分类

  • 按照处理数据类型角度,可分为字节流和字符流。
  • 按照数据流向,分为输入流和输出流。(输入和输出是相对于程序来说的)
  • 按照流的功能,可分为节点流和处理六流(没有节点流,处理流发挥不了作用),流的前面是File或者ByteArray开头的均是节点流,其他的是处理流。处理流就是为了提升性能的。

四大抽象的基类

在这里插入图片描述

IO流操作的四大步骤

  • 创建流
  • 选择流‘
  • 操作
  • 释放资源

- 关于InputStream和OutputStream常用方法的使用

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

public class practice2 {
	public static void main(String[] args) {
		
		String path1="E:\\java\\workplace\\test\\测试\\io1.txt";
		String path2="E:\\java\\workplace\\test\\测试\\io2.txt";
		Input(path1);
		output(path2);
		copy(path1,path2);
		
	}
	//文件输入流
	public static void Input(String path) {
		try {
			FileInputStream in=new FileInputStream(path);
			int len;
		    while((len=in.read())!=-1 ) {
		    System.out.print((char)len);
		    }
		    in.close();//每次使用完之后,都必须关掉连接
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 catch (IOException e) {
				// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
		/*
		 * 文件字节输入流
		 * */
	public static void textfileinputstream() {
		try {
			FileInputStream in=new FileInputStream("E:\\java\\workplace\\test\\src\\day12\\tt.txt");
		    byte [] b=new byte[10];//缓冲容器,每次读取10个字节
		    int len=0;//接收长度
		    //in.read(b);//in.read()读取每行的长度,当in.read()返回值为-1,则文件夹读完了
		    while((len=in.read(b))!=-1) {
		    	//字节数组--->字符串(解码)
                String str=new String(b,0,len);
			    System.out.println(str);
			    //new String(b,0,len)参数一是缓冲数据的数组,参数2是从数据的哪个位置开始转换字符串,参数3是总共需要转换字符串的长度
		    	
		    }
		    in.close();//注意。。。。流在使用完毕之后,一段要关闭
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	/*
	 * 文件字节输出流  
	 * 
	 * */
	public static void testFileoutputStream() {
		try {
			FileOutputStream out=new   FileOutputStream("E:\\java\\workplace\\test\\src\\day12\\tt2\\tt1.txt");
		    String string="你好吗";
		    //字符串-->字节数组(编码)
		    byte[] br=string.getBytes();
		    out.write(br);//将数据写到内存
		    out.flush();//把内存数据刷写到磁盘
		    out.close();//每次使用后,都需要关闭
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
/*
 * 复制一个文件内容到另外一份路径去,可以是文档,图片等其他类型的文件
 * */
	public static void  copyFlie(String inpath,String outpath) {
		try {
			FileInputStream in=new FileInputStream(inpath);
			FileOutputStream out=new FileOutputStream(outpath);
			byte [] b=new byte[100];//设置数据接收读取文件的内容
			int len=0;
			while((len=in.read(b))!=-1) {
				out.write(b, 0, len);
			}
			 out.flush();//把内存数据刷写到磁盘
			 out.close();//每次使用后,都需要关闭
			 in.close();  
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

}
  •  

对于Read和Write类的常用方法

import java.io.*;

public class fileChar {
	public static void main(String []args) {
		
		String inpath="E:\\java\\workplace\\test\\src\\day12\\char1.txt";
		testFilein(inpath);
		String outpath="E:\\java\\workplace\\test\\src\\day12\\char2.txt";
		testfileout("你好",outpath);
		testfileout("不好",outpath);
		String outpath2="E:\\java\\workplace\\test\\src\\day12\\tt2\\char1.txt";
		copyfile(inpath, outpath2);
	}
/*
 * 文件字符输入流FileReader
 * */
	public static void testFilein(String inpath) {
		try {
			FileReader  r=new FileReader(inpath);
			char[] ch=new char[100];
			int len=0;
			while((len=r.read(ch))!=-1) {
				System.out.println(new String(ch,0,len));
			}
			r.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
	/*
	 * 文件字符输出流FileWriter
	 * */
	public static void testfileout(String str,String outpath) {
		try {
			FileWriter w=new FileWriter(outpath);
			
			w.write(str);
			w.flush();
			w.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	/*
	 * 文件字符流复制
	 * */
	public static void copyfile(String inpath,String outpath) {
		try {
			FileReader r=new FileReader(inpath);
			FileWriter w=new FileWriter(outpath);
			char [] ch=new char[255];//创建临时存放数据的数组
			int len=0;//读取数据的长度
			//r.read返回值是读取数据的长度
			while((len=r.read(ch))!=-1) {
				w.write(ch, 0, len);
			}
			r.close();
			w.flush();
			w.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值