/*
需求:在F盘下的javawork\splits文件夹里面存放分割的文件
通常我们可以直接将文件夹的路径写成绝对路径
FileOutputStream fos = new FileOutputStream("F:\\javawork\\splits\\");
但是,往往在实际中,我们想要使用相对路径,那么可以这样写
*/
//先将当前路径封装成File对象
File splits = new File("splits");
if(!splits.exists())
{
splits.mkdir();
}
//然后直接在splits后面跟上一个\即可
FileOutputStream fos = new FileOutputStream(splits+"\\");
是在学习切割文件和合并文件中遇到的问题,原演示代码(里面用到的复写Enumeration的方法来使用ArrayList提高效率的方法):
/*
演示切割文件和合并文件
*/
import java.io.*;
import java.util.*;
class SplitFile
{
public static void main(String[] args) throws IOException
{
splitFile();
merge();
}
public static void merge()throws IOException
{
//如果没有文件夹则创建文件夹
File splits = new File("splits");
if (!splits.exists())
{
splits.mkdir();
}
ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
for (int x=1; x<=2; x++)
{
al.add(new FileInputStream(splits+"\\"+x+".part"));
}
//Enumeration使用匿名内部类,所以对访问的局部变量进行final修饰
final Iterator<FileInputStream> it = al.iterator();
Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
{
public boolean hasMoreElements()
{
return it.hasNext();
}
public FileInputStream nextElement()
{
return it.next();
}
};
SequenceInputStream sis = new SequenceInputStream(en);
FileOutputStream fos = new FileOutputStream(splits+"\\"+"0.mp3");
byte[] buf = new byte[1024];
int len = 0;
while((len=sis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
fos.close();
sis.close();
}
public static void splitFile()throws IOException
{
FileInputStream fis = new FileInputStream("0.mp3");
//如果没有文件夹则创建文件夹
File splits = new File("splits");
if (!splits.exists())
{
splits.mkdir();
}
byte[] buf = new byte[1024*1024*2];
int len = 0;
int count=1;
while((len=fis.read(buf))!=-1)
{
FileOutputStream fos = new FileOutputStream(splits+"\\"+(count++)+".part");
fos.write(buf,0,len);
fos.close();
}
fis.close();
}
}