该程序的功能是将指定目录所有内容拷贝到另一个目录文件中,我为大家讲解一下我做的思路: 首先,我们是不是要知道要拷贝的对象啊,也就是指定要拷贝的目录。但是有些目录下是不是很多文件夹,这时我们就要对每个文件夹遍历,这里我用递归的方法;其次,对递归的文件是不是要保存起来?我们可以才用数组或集合的来保存,只要把文件的路径保存到数据或集合中即可,这里我用的数集合;最后,就要将读取到的数据写到另一个文件夹中,这时就需要到流操作,FileInputStream读取文件,FileOutputStream写入文件。可是这时我们要想到,如果文件比较大的时候,那读取的时候是不是很慢?缓冲技术可以提高读取数据效率。其实不管字符流还是字节都有相应的规律,好了不多说了,具体的功能大家可以参照下面的代码:
/**
* @param args
* @throws Exception
*/
static FileInputStream in = null;
static FileOutputStream out = null;
static BufferedInputStream buffin = null;
static BufferedOutputStream buffout = null;
public static void main(String[] args) throws Exception {
File file = new File("E:\\myuser\\wen1");
List<File> list = new ArrayList<File>();
fileList(file, list);
CopyFileJava(list);
}
public static void setStream(String file,String name) throws Exception{
out = new FileOutputStream("E:\\myuser\\my\\"+name);
in = new FileInputStream(file.toString());
}
public static void CopyFileJava(List<File> list) throws Exception {
byte[] buff = new byte[1024];
int len = 0;
try {
for (File file : list) {
setStream(file.toString(),file.getName());
buffin = new BufferedInputStream(in);
buffout = new BufferedOutputStream(out);
while ((len = buffin.read(buff)) != -1) {
buffout.write(buff, 0, len);
}
}
} catch (Exception e) {
throw e;
} finally {
try {
if (buffin != null) {
buffin.close();
}
if (buffout != null) {
buffout.close();
}
} catch (Exception e) {
throw e;
}
}
}
public static void fileList(File file, List<File> list) {
File filenPath[] = file.listFiles();
for (File path : filenPath) {
if (path.isDirectory()) {
fileList(path, list);
} else {
list.add(path);
}
}
}