Java IO流,文件字节输入流,字节输出流,读、写操作以及文件copy复制(边读边写)

文件字节输入输出流演示,及文件copy复制演示

  • Java IO流,文件字节输入流,字节输出流,读、写操作以及文件copy(边读边写)
    • java.io.FileInputStream (万能的)
      • FileInputStream演示
    • java.io.FileOutputStream (万能的)
      • FileOutputStream演示
    • 文件copy(边读边写)
      • Copy演示

Java IO流,文件字节输入流,字节输出流,读、写操作以及文件copy(边读边写)

关于文件字节方式的

  • java.io.FileInputStream
  • java.io.FileOutputStream

java.io.FileInputStream (万能的)

  • 1、文件字节输入流,万能的,任何类型的文件都可以采用这个流来读。
    2、完成输入的操作,完成读的操作(硬盘—>内存)

    FileInputStream类的其它常用方法

    • int available():返回流当中剩余的没有读到的字节数量
      • 当文件字节非常小的时候,读的时候可以直接读完。
      • new byte[fis.available()]
    • long skip(long n) : 跳过几个字节不读。

FileInputStream演示

package com.newedu.javabase.dayexercise.v7;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileInputStreamTest04 {
	public static void main(String[] args) {
        //创建文件字节输入流对象
		FileInputStream fis = null;
        //进行 try...catch  捕获异常
		try {
            
			fis = new FileInputStream("文件地址");
			
            //准备一个byte数组
			byte[] bytes = new byte[4];  //4,一次读取4个字节
			
			int readCount = 0; //用于接受fis.read()的返回值,返回值为:读取的字节个数。
            
			while((readCount = fis.read(bytes)) != -1){
				System.out.print(new String(bytes,0,readCount));
			}
			
		} catch(FileNotFoundException e) {	//文件未找到  异常
			e.printStackTrace();
		} catch (IOException e) {	//IO异常
			e.printStackTrace();
		} finally {		//finally代码块内写fis.close(),确保流能够关闭。
			if(fis != null) {
				try {
					fis.close();  //关闭流
				} catch(IOException e) {	//捕获异常
					e.printStackTrace();
				}
			}
		}
	}
}
/*
运行结果:和原文一致
aaa
ababab
sssss
sss  sss

fffff
*/

java.io.FileOutputStream (万能的)

  • 文件字节输出流,负责写。
  • 从内存到硬盘。

FileOutputStream演示

package com.newedu.javabase.dayexercise.v7;

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

public class FileOutputStreamTest01 {
	public static void main(String[] args) {
        
		FileOutputStream fos = null;
		try {
			// 若果所在地址,没有temp3文件,则创建temp3文件
			
			//方式 一
			// 这种方式谨慎使用,种种方式会现将文件清空,然后重新写入。
			//fos = new FileOutputStream("C:/Java/tempfile/temp3");
			
			//方式二
			//以追加的方式在文件末尾写入,不会清空原文。
			// new FileOutputStream(String name,boolean append);
			
			fos = new FileOutputStream("C:/Java/tempfile/temp3",true);
			
			//开始写
			byte[] bytes = {97,98,99};//a,b,c
			//将byte数组全部写出!
			fos.write(bytes); //abc
			
			//将byte数组部分写出!
			fos.write(bytes,0,2);//ab
			
			//结果:abcab
			
			//字符串
			String s = "我是一个中国人,我骄傲。";
			//将字符串转化为byte数组
			byte[] bs = s.getBytes();
			//写
			fos.write(bs);
			// abcab我是一个中国人,我骄傲。
			//写完之后一定刷新
			fos.flush();
		} catch(FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(fos != null) {
				try {
					fos.close();
				} catch(IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

文件copy(边读边写)

  • 使用FileInputStream+ FileOutputStream完成文件的拷贝。

  • 拷贝的过程应该是一边读,一边写。

  • 使用以上的字书流拷贝文件的时候,文件类型随意,万能的。什么样的文件都能拷贝。

Copy演示

package com.newedu.javabase.dayexercise.v7;

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

/*
 * 使用FileInputStream + FileOutputStream 完成文件的拷贝。
 * 拷贝的过程应该是一边读,一边写。
 * 使用以上的字书流拷贝文件的时候,文件类型随意,万能的。什么样的文件都能拷贝。
 * 
 */
public class CopyTest01 {
	public static void main(String[] args) {
       
		FileInputStream fis = null;
		FileOutputStream fos = null;
        
		try {
			//创建一个输入流对象,
			fis = new FileInputStream("C:\\User\\Videos\\java\\练习视频.avi");
			//创建一个输出流对象,
			fos = new FileOutputStream("C:\\Java\\copyTest\\练习视频.avi", true);
			
			//最核心的:一边读,一边写。
			byte[] bytes = new byte[1024*1024]; //1MB (一次最多拷贝1MB)
			int readCount = 0;
			while((readCount = fis.read(bytes)) != -1) {
				fos.write(bytes,0,readCount);
			}
			
			//刷新,输出流最后要刷新
			fos.flush();
            //捕获异常
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
            //两个流关闭的时候应该怎么try catch
			//:分开try  catch
			//因为一起try的时候,其中一个出现异常会会影响到另一个流的关闭。
			if(fis != null) {
				try {
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

最后查看源文件和copy文件属性,字节数一致说明完全copy。

ヾ(◍°∇°◍)ノ゙

你可能感兴趣的:(Java)