本帖最后由 zms2100 于 2013-5-9 08:25 编辑
下面是代码,问题是要切割比较大的文件,因为缓冲流是可以自定义(设置)本身已有的buf数组的大小,
所以就不想采用额外创建数组,现在的问题是按格式指定了buf数组的大小,但是无法成功切割文件。
(每次都是切割出一大堆的10字节的小文件,额外添加数组进去却又能成功)。
求大神拯救................................
(为方便大神观看,文中主要位置有注释,另外如果要模拟测试可以直接修改主函数上的一小部分代码,谢谢各位啦..............)
package hehe;
import java.io.*;
import java.util.*;
class SplitFile2
{
public static void main(String[] args) throws IOException
{
File f1 = new File("F:\\KuGouCache\\Java核心技术,卷1(原书第8版).pdf"); //请输入要切割的文件路径,切割后的子文件会自动创建在当前目录下。
//填写要切割的路径及文件名; //由于程序有问题,请注意要按ctrl + C;
int i = 5; //指定切割后的子文件大小,“1”代表2MB;
if(f1.exists() & f1.isFile())
splitFile(f1,9); //调用切割方法;
else
throw new RuntimeException("指定文件不存在,请输入正确文件路径。");
//merge(); //合并方法(不相关,另外的忽略);
}
public static void splitFile(File f1,int i) //切割方法;
{
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
//byte[] by = new byte[1024*1024*2]; //如果这里取消//符号,并加它用作缓冲流的存储数组就会成功;
int str = 0;
int count = 1;
int x = 0;
try
{ //缓冲流的默认容量为8192(8kb);
bis= new BufferedInputStream(new FileInputStream(f1),2097152);
//根据API文档的说明是在这里添加int数值,来指定缓冲流本身的buf数组大小;
while((str=bis.read( ))!=-1) //如果使用外来数组: 格式: bis.read(by)!=-1
{
if(x==0)
{
String s =(count++)+".part";
bos = new BufferedOutputStream(new FileOutputStream(f1.getAbsoluteFile()+s));
}
bos.write(str); //调用外来数组则添加该数组名称 by ;
if(x==i)
{
x=0;
bos.close();
}
else
x++;
}
}
catch(IOException e)
{
throw new RuntimeException("切割失败");
}
finally
{
try
{
bis.close();
bos.close();
}
catch(IOException e)
{
throw new RuntimeException("读取/输出流关闭失败");
}
}
}
|
|