IO流-文件字节流-Java

1.文件字节流

FileInputStream通过字节的方式读取文件,适合读取所有类型的文件(图像、视频、文本文件等)。Java提供了FileReader专门读取文本文件。

FileOutputStream通过字节的方式写数据到文件中,适合所有类型的文件。java也提供了FileWriter专门写入文本文件。

文件字节输入流

import java.io.*;
public class FileStreamDemo {
	public static void main(String[] args) {
		//创建对象
		FileInputStream fis = null;
		try {
			//创建文件字节输入流对象
			fis = new FileInputStream("d:/dd.jpg");
			int temp = 0;
			while((temp = fis.read())!=-1) {
				System.out.println(temp);   //返回int值是0-255之间
			}
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(fis!=null) {
					fis.close();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		
	}
}

文件字节输入流

import java.io.*;
public class FileStreamDemo {
	public static void main(String[] args) {
		//创建对象
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			//创建文件字节输入流对象
			fis = new FileInputStream("d:/dd.jpg");
			//创建文件字节输出流对象
			fos = new FileOutputStream("d:/aa.jpg");
			int temp = 0;
			while((temp = fis.read())!=-1) {
				fos.write(temp);
				//System.out.println(temp);   //返回int值是0-255之间
			}
			//将数据从内存中写入到磁盘中
			fos.flush();
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(fis!=null) {
					fis.close();
				}
				if(fos!=null) {
					fos.close();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		
	}
}

2.通过缓冲区提高读写效率

上一个案例对于效率的问题有问题,读取和写入都是一个字节一个字节来,那不慢嘛,对不

那么如何提高效率呢,通过缓冲区来实现

方式一

通过创建一个指定长度的字节数组作为缓冲区,以此来提高IO流的读写效率。该方式适用于读取较大图片时的缓冲区定义。注意:缓冲区的长度一定是2的整数幂,一般情况下1024长度较为合适。

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileStringBufferedDemo {
	public static void main(String[] args) {
		//创建对象
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			//创建文件字节输入流对象
			fis = new FileInputStream("d:/dd.jpg");
			//创建文件字节输出流对象
			fos = new FileOutputStream("d:/aa.jpg");
			//创建一个缓冲区,提高读写效率
			byte[] buff = new byte[1024];
			int temp = 0;
			while((temp = fis.read(buff))!=-1) {  //每次装1024
				fos.write(buff,0,temp);
				//System.out.println(temp);   //返回int值是0-255之间
			}
			//将数据从内存中写入到磁盘中
			fos.flush();
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(fis!=null) {
					fis.close();
				}
				if(fos!=null) {
					fos.close();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
}

方式二

通过创建一个字节数组作为缓冲区,数组长度是通过输入流对象的available()返回当前文件的预估长度来定义的。在读写文件时,是在一次读写操作中完成文件读写操作的。注意:如果文件过大,那么对内存的占用也是比较大的,所以大文件不建议使用该方法。

与方式一的不同在于指定数据的长度不同

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileStringBuffered2Demo {
	public static void main(String[] args) {
		//创建对象
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			//创建文件字节输入流对象
			fis = new FileInputStream("d:/dd.jpg");
			//创建文件字节输出流对象
			fos = new FileOutputStream("d:/aa.jpg");
			//创建一个缓冲区,提高读写效率
			byte[] buff = new byte[fis.available()];
			fis.read(buff);
			fos.write(buff);
			//将数据从内存中写入到磁盘中
			fos.flush();
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(fis!=null) {
					fis.close();
				}
				if(fos!=null) {
					fos.close();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}

}

3.通过字节缓冲流提高读写效率

Java缓冲流本身并不具有IO流的读取与写入功能,只是在别的流上加上缓冲功能提高效率,就像是把别的流包装起来一样,因此缓冲流是一种处理流。

当对文件或者其他数据源进行频繁的读写操作时,效率比较低,这时如果使用缓冲流就能更高效的读写信息。因为缓冲流是先将数据缓存起来,然后当缓存区存满后或者手动刷新时在一次性的读取到程序或写入目的地。

因此,缓冲流还是很重要的,我们在IO操作时记得加上缓冲流来提升性能。

BufferedInputStream和BufferedOutputStream这两个流是缓冲字节流,通过内部缓存数组来提高操作流的效率。

import java.io.*;
public class FileStreamBuffed3Demo {
	public static void main(String[] args) {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		try {
			fis = new FileInputStream("d:/dd.jpg");
			bis = new BufferedInputStream(fis);
			fos = new FileOutputStream("d:/bb.jpg");
			bos = new BufferedOutputStream(fos);
			//缓冲流中的byte数组长度默认是8192
			int temp = 0;
			while((temp = bis.read())!=-1) {
				bos.write(temp);
				
			}
			bos.flush();
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(bis!=null) {
					bis.close();
				}
				if(fis!=null) {
					fis.close();
				}
				if(bos!=null) {
					bos.close();
				}
				if(fos!=null) {
					fos.close();
				}
			//注意:关闭流顺序:"按照后开的先关闭"	
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		
	}
}

4.定义文件拷贝工具类

import java.io.*;
public class FileCopyTools {
	public static void main(String[] args) {
		copyFile("d:/bb.jpg","d:/aaa.jpg");
	}
	/*
	 * 文件拷贝方法
	 */
	public static void copyFile(String src,String des) {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		try {
			fis = new FileInputStream(src);
			bis = new BufferedInputStream(fis);
			
			bos = new BufferedOutputStream(new FileOutputStream(des));
			int temp = 0;
			while((temp= bis.read())!=-1) {
				bos.write(temp);
			}
			bos.flush();
		}catch(Exception e){
			e.printStackTrace();
		}finally {
			try {
				if(bis!=null) {
					bis.close();
				}
				if(fis!=null) {
					fis.close();
				}
				if(bos!=null) {
					bos.close();
				}
				if(fos!=null) {
					fos.close();
				}
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		
	}
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 文件拆分是将一个大文件分成多个小文件的过程,这在处理大文件时非常有用。在Java中,可以使用文件字节IO流来实现文件拆分。具体步骤如下: 1. 打开要拆分的文件,创建一个输入流对象。 2. 创建一个输出流对象,用于写入拆分后的文件。 3. 定义一个缓冲区,用于存储读取的数据。 4. 循环读取文件中的数据,每次读取一定大小的数据,将其写入输出流中。 5. 当读取的数据量达到指定大小时,关闭当前输出流,创建一个新的输出流,继续写入数据。 6. 循环结束后,关闭输入流和输出流。 需要注意的是,拆分后的文件名可以根据需要进行命名,可以使用数字、字母或其他符号来区分不同的文件。同时,拆分后的文件大小也需要根据实际需求进行设置,一般建议不要超过2GB。 ### 回答2: Java是一门广泛应用的编程语言,涵盖了众多领域,其中文件输入输出是其中之一。文件字节IO流文件拆分是文件处理中的一项重要功能,在Java中,常用的文件处理类库是java.io库,它包含了Java文件输入输出所需要的各种类,例如File类、FileReader类、FileWriter类、BufferedReader类、InputStream类、OutputStream类等。 Java文件字节IO流文件拆分主要实现通过读取一个大文件,然后将其分割成小的文件块,以便于更好的管理文件,便于数据传输和存储。这种操作依赖于Java的二进制位操作,它的流程如下: 1. 指定待拆分的文件 通过File类下的File对象指定待拆分的文件。 2. 获取待拆分文件的长度 通过File对象的length()方法获取待拆分文件的长度,以便于下一步的拆分操作。 3. 打开输入流 通过InputStream类中的FileInputStream对象打开待拆分文件的输入流,以读取文件内容。 4. 拆分待处理文件 使用byte[]数组作为缓存区读取待处理文件中的内容,并将它分割成小的文件块。 5. 写入分割文件 通过OutputStream类中的FileOutputStream对象打开文件的输出流,将分割的文件块写入新的文件中(例如:文件名末尾加以排序数字)。 6. 关闭输入输出流 操作完成后,关闭输入输出流释放文件资源,避免内存泄漏。 文件字节IO流文件拆分可以适用于很多场景,例如:大型多媒体文件的存储及快速传输、分散式文件处理场景等。在Java中,我们可以根据自己的需要,使用java.io库中的File类、InputStream类、OutputStream类等API进行相关操作。 ### 回答3: Java输入输出(I/O)是Java编程中重要的一个方面。I/O是程序与外部环境交互的重要方式,它允许程序从磁盘文件或其他设备中读取数据,并将计算结果写回磁盘或其他设备。在Java I/O中,文件字节IO流是常用的操作之一。 文件字节IO流是对文件进行字节级别操作的输入输出流。它以字节为单位进行读取和写入文件,每次读取和写入的长度是固定的,一般为1个字节或多个字节。 文件拆分是文件字节流IO操作中的一种常见应用。文件拆分是将文件按照一定的规则分解成多个文件的过程。例如,将一个大文件分成多个小文件,便于存储和传输。文件拆分在数据处理、数据传输等领域都有广泛的应用。 Java中实现文件拆分可以使用文件字节IO流。具体实现可以采用以下伪代码: 1. 打开原文件,创建文件字节输入流; 2. 创建多个文件字节输出流,每个输出流对应一个拆分后的文件; 3. 读取原文件,逐个字节分别写入每个输出流; 4. 当一个拆分后的文件大小达到限制值时,关闭该输出流,创建一个新的输出流继续写入; 5. 当原文件读取完毕时,关闭所有输出流,完成文件拆分。 这里需要考虑的一些问题是如何确定拆分后每个文件的大小,如何命名新的拆分文件等。 在编写文件拆分程序时,需要注意文件拆分的合法性。例如,在分解文件时需要根据文件格式和业务需求来确定分解规则,保证分解后的文件是合法的。同时还需要考虑拆分后的文件如何合并的问题。 综上所述,文件字节IO流文件拆分操作是Java I/O编程中常见的操作之一。实现文件拆分需要充分考虑拆分规则和文件合法性等问题。在实际开发中,我们可以根据具体需求,结合其他API来实现更多复杂的文件操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值