IO流小结---以及文件复制的方法

IO流小结以及文件复制的方法

  • 一、流的概述
    流根据方向可以分为:输入流和输出流。注意:输入和输出是相对于内存而言的。从内存出来的就是输出,到内存中的就是输入。输入流又叫做InputStream,输出流有叫做OutputStream。输入还叫做“读 Read”,输出还叫做“写 Write”
  • 二、流的读取方式
    流根据读取数据的方式可以分为:字节流和字符流,字节流是按照字节的方式读取,字符流是按照字符的方式读取,一次读取2个字节。Java语言中一个字符占2个字节。字节流适合读取:视频、声音、图片等二进制文件;字符流适合读取:纯文本文件。 Java语言中所有的字节流都以Stream结尾。所有的字符流都含有Reader或Writer;
  • 三、常用流及其方法
    1.FileInputStream
//java.io.FileInputStream
//1. 要读取某文件,先与这个文件创建一个“输入流”
		//文件路径
		String FilePath =  "D:\\java\\test01.txt";
		FileInputStream fis =new FileInputStream(FilePath);
	//开始读,返回一个int类型的数据
	int  i	= fis.read();
	//当返回的值为-1时,表示已经读取到文件的末尾	

	//int read (byte [] bytes); 
	// 读取之前在内存中准备一个byte数组,每次读取多个字节存储到byte数组中
		//一次读取多个字节,不是单字节读取了        效率高
		//准备一个byte数组
		byte [] bytes =new byte [1024];		//每次读取1kb
		int i1 =fis.read(bytes);   // 该方法返回int类型的值代表的的是,这次读取了多少个字节
		
		//循环读取
		int temp =0 ;
			while((temp=fis.read(bytes))!=-1){
			System.out.println(new String (byte,0,temp));

	//fis.available(); 返回流中剩余的估计字节数
	//fis.skip(2); 跳过俩个字节

	//关闭
	fis.close();
}

2.FileOutputStream

import java.io.FileOutputStream;
//文件字节输出流, 将计算机内存中的数据写入硬盘中的文件中
//1. 创建文件字节输出流
		FileOutoutStream fos =new FileOutoutStream("D:\\java\\test02.txt");   //该文件不存在则自动创建
		//以追加的方式写入
		FileOutoutStream fos =new FileOutoutStream("D:\\java\\test02.txt",true);

//2. 开始写
String str ="HelloWord!";
byte[] bytes =str.getBytes();
//3.将byte数组中的所有数据全部写入
fos.write(bytes);

//4. 将byte数组中的一部分写入
fos.write(bytes,0,2);
fos.close();


3.DateOutoutStream

import java.io.DateOutputStream;
/*
DateOutputStream 数据字节输出流
可以将内存中的“int i=10”写入到硬盘文件中
写进去的不是字符串,写进去的是二进制数据,带类型
*/
//创建数据字节输出流
			DataOutputStream dos =new	DataOutputStream(new FileOutputStream("D:\\java\\test03.txt"));
			//准备数据
			byte b =10;
			short s =11;
			int i=13;
			long l =1110L;
			double d=23.1;
			float f =123f;
			boolean flag =false ;
			char c ='a';
//写
			dos.writeByte(b);
			dos.writeShort(s);
			dos.writeInt(i);
			dos.writeLong(l);
			dos.writeDouble(d);
			dos.writeFloat(f);
			dos.writeBoolean(flag);
			dos.writeChar(c);
	
			//刷新
			dos.flush();
			//关闭
			dos.close();

4.DateInputStream

import java.io.DateInputStream ;
//创建输入流
		DataInputStream dis =new DataInputStream(new FileInputStream("D:\\java\\test03.txt"));
		
		//读
		//注意:要使用该留读取数据,必须提前知道该文件中数据的存储格式,顺序
		//读的顺序必须和写入的顺序相同
		byte b =dis.readByte();
		short s = dis.readShort();
		int i =dis.readInt();
		long l =dis.readLong();
		double d =dis.readDouble();
		float f =dis.readFloat();
		boolean flag =dis.readBoolean();
		char c = dis.readChar();
	
		System.out.println(b);
		System.out.println(s);
		System.out.println(i);
		System.out.println(l);
		System.out.println(d);
		System.out.println(f);
		System.out.println(flag);
		System.out.println(c);
		
		//关闭
		dis.close();

四、关于文件复制的三种方法

public static void main(String[] args) throws Exception {
		//创建输入流
		FileInputStream fis =new FileInputStream("D:\\java\\课程\\test.txt");
		
		//创建输入流
		FileOutputStream fos =new FileOutputStream("D:\\java\\课程\\test02.txt");
	
		//一边读一边写
		byte [] bytes =new byte[1024]; //1kb
		int temp =0;
		while((temp=fis.read(bytes))!=0) {
			//将byte数组中内容直接写入
			fos.write(bytes,0,temp);
		}
		//刷新
		fos.flush();
		//关闭
		fis.close();
		fos.close();
	
	}

以下代码只能复制纯文本文件

public static void main(String[] args) throws Exception{
		FileReader fr =new FileReader ("D:\\java\\课程\\test03.txt");
		FileWriter fw =new FileWriter ("D:\\java\\课程\\test04.txt");
		
		char [] chars =new char [512];
		int temp=0;
		while((temp =fr.read(chars))!=-1) {
			//写
			fw.write(chars,0,temp);
		}
		
		fw.flush();
		fr.close();
		fw.close();
	}
	public static void main(String[] args) throws Exception{
			BufferedReader br =new BufferedReader(new FileReader("D:\\java\\课程\\test01.txt"));
			BufferedWriter bw =new BufferedWriter(new FileWriter("D:\\java\\课程\\test05.txt"));
		
			String temp =null;
			while ((temp=br.readLine())!=null) {
				bw.write(temp);
				bw.newLine();
			
			}
			
			
		bw.flush();
		br.close();
		bw.close();
		}
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值