欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-08 23:17:01
...

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 java