java以流的方式上传文件

本文介绍了一种用于处理大于60MB的大文件的Java程序。该程序使用FileInputStream和FileOutputStream类来分段读取和写入文件,确保能够处理任意大小的文件而不会超出byte数组的最大存储限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为byte数组最大存储值不超过64M,所以当一个文件大于60M 的时候,需要分开几个流操作。以下程序就可以写入任意大小的文件。这个程序应用了FileInputStream类的方法如下:
read(byte[] b,int off,int len)
把特定位置的流内容读入数组,已经读入byte[]数组的内容,会在流文件中删除。
程序运行的结果会产生一个新文件。

package com.cz.test1;

import java.io.*;

public class IoUtill {

	public static void main(String[] args) throws IOException {

		// 创建两个文件
		File inFile = new File("F:\\1.bmp");

		File outFile = new File("E:\\2.jpg");

		// 最大的流为60Mb,当文件的容量大于60Mb的时候便分开流

		final int MAX_BYTE = 60000000;

		long streamTotal = 0; // 接受流的容量

		int streamNum = 0; // 流需要分开的数量

		int leave = 0; // 文件剩下的字符数

		byte[] inOutb; // byte数组接受文件的数据

		// 创建流文件读入与写出类

		FileInputStream inStream = new FileInputStream(inFile);

		FileOutputStream outStream = new FileOutputStream(outFile);

		// 通过available方法取得流的最大字符数

		streamTotal = inStream.available();

		// 取得流文件需要分开的数量

		streamNum = (int) Math.floor(streamTotal / MAX_BYTE);

		// 分开文件之后,剩余的数量

		leave = (int) streamTotal % MAX_BYTE;

		// 文件的容量大于60Mb时进入循环

		if (streamNum > 0) {

			for (int i = 0; i < streamNum; ++i) {

				inOutb = new byte[MAX_BYTE];

				// 读入流,保存在byte数组

				inStream.read(inOutb, 0, MAX_BYTE);

				outStream.write(inOutb); // 写出流

				outStream.flush(); // 更新写出的结果

			}

		}

		// 写出剩下的流数据

		inOutb = new byte[leave];

		inStream.read(inOutb, 0, leave);

		outStream.write(inOutb);

		outStream.flush();

		inStream.close();

		outStream.close();

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值