import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
public class Test3 {
/**
* 切割文件
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File file = getFile();
//请输入第二个要被拷入的文件路径
File dir = new File("G:\\abcd");
splitFile(file , dir);
}
/**
* 切割文件
* 返回值boolean,
* 参数,一个切割文件,一个File的dir路径
* 分析
* 1.得到文件对象
* 2.创建输入流
* 3.创建输出流引用 因为要生成很多个文件.所以输出流对象在循环中
* 4.创建一个小数组arr.用来定义缓冲区
* 5.创建一个count 的int变量 用来区分切割后文件的名字
* 6.创建一个name 来获取file对象的名字
* 7.read这个流.创建输出流对象来输出这个流
* 8.返回true
* @throws IOException
*/
private static void splitFile(File file , File dir) throws IOException {
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = null;
byte[] arr = new byte[1024 * 1024 ];//得到的数据是M
int count = 1;
String name = file.getName();
int len;
while((len = fis.read(arr)) != -1) {
fos = new FileOutputStream(new File(dir , name + count++));
fos.write(arr, 0, len);
fos.close();//创建一个文件,关闭一个流
}
}
/*
* 定义一个方法获取键盘录入的文件路径,并封装成File对象返回
* 1.返回类型File
* 2.参数列表无
*/
private static File getFile() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入文件路径:");
while(true) {
String line = sc.nextLine();
File file = new File(line);//把文件名封装在File对象
if(!file.exists())
System.out.println("文件不存在,请重新输入:");
else if(file.isDirectory())
System.out.println("您输入的是一个文件夹,请重新输入:");
else
return file;//为什么没有跳出循环,因为ruturn是跳出方法.方法都终止了.还有什么循环
}
}
}
|
|