import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileSplit
{
static final int partSize = 1000*1024;
public static void main(String[] args)
{
if (args.length < 1)
{
System.out.println("请输入文件名参数");
return;
}
String fileName = args[0];
File file = new File(fileName);
FileInputStream fis = null;
byte[] buf = new byte[1024];
int byteRead = 0, byteToWrite = 0;
try
{
fis = new FileInputStream(file);
long fileLength = file.length();
long fileCount = (fileLength % partSize == 0) ?
(fileLength / partSize) : (1 + fileLength / partSize);
long num = 1;
while (true)
{
String partFileName = fileName + ".part" + getPartNum(fileCount, num++);
FileOutputStream fos = new FileOutputStream(new File(partFileName));
if (byteToWrite < byteRead)
{
int byteLeft = byteRead - byteToWrite;
fos.write(buf, byteToWrite, byteLeft);
}
int byteWrited = 0;
while (byteWrited < partSize)
{
byteRead = fis.read(buf);
if (byteRead <= 0)
break;
byteToWrite = byteRead < (partSize - byteWrited) ? byteRead : (partSize - byteWrited);
fos.write(buf, 0, byteToWrite);
byteWrited += byteToWrite;
}
fos.close();
if (byteRead <= 0)
{
fis.close();
break;
}
}
}
catch (IOException e)
{
e.printStackTrace();
return;
}
}
static private String getPartNum(long total, long x)
{
String prefix = "";
while (Long.toString(total).length() > Long.toString(x).length())
{
total /= 10;
prefix += "0";
}
return prefix + Long.toString(x);
}
}
=========================================================================================
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.Vector;
//合并拆分的文件(fileName.part1~fileName.partx)
public class FileMerge
{
//如果拆分的文件放在目录dir下,被拆分的文件名称为test.exe,合并后的文件路径为dst,
//那么,输入的参数就是"java FileMerge dir det test.exe"
//其中,dir目录下有test.exe.part1,test.exe.part2等拆分文件
public static void main(String[] args)
{
if (args.length < 3)
{
System.out.println("三个参数: part文件路径,生成文件路径,被拆分的文件的名称");
return;
}
merge(args[0], args[1], args[2]);
}
//把partDir下的fileName的拆分文件合并后,写到desDir目录下
//如果partDir或者desDir为空都返回false,不会自己创建目录
public static boolean merge(String partDir, String destDir, String fileName)
{
Vector partFileNames = new Vector();
//验证拆分文件的目录是否存在
File partDirFile = new File(partDir);
if (!partDirFile.exists() || !partDirFile.isDirectory())
{
System.out.println("拆分文件夹不存在");
return false;
}
//验证目标文件的目录是否存在
File destDirFile = new File(destDir);
if (!destDirFile.exists() || !destDirFile.isDirectory())
{
System.out.println("目标文件夹不存在");
return false;
}
//找出partDir目录下的fileName.part<1,2,...,x>文件,并排序
File[] filesOrDirs = partDirFile.listFiles();
int i, length = filesOrDirs.length;
for (i = 0; i < length; i++)
{
String tmpName = filesOrDirs[i].getName();
if (filesOrDirs[i].isFile() && tmpName.startsWith(fileName + ".part"))
partFileNames.add(tmpName);
}
Collections.sort(partFileNames);
if (partFileNames.size() <= 0)
{
System.out.println("没有找到拆分文件");
return false;
}
//逐个读取partFileNames文件,并重写到新目的地
try
{
byte[] buf = new byte[1024];
FileOutputStream fos = new FileOutputStream(destDir + "/" + fileName);
int size = partFileNames.size();
for (i = 0; i < size; i++)
{
File file = new File(partFileNames.elementAt(i));
FileInputStream fis = new FileInputStream(file);
int num = -1;
while((num = fis.read(buf)) > 0)
fos.write(buf, 0, num);
fis.close();
}
fos.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
return true;
}
}