黑马程序员技术交流社区
标题:
一道练习题
[打印本页]
作者:
张聪珉
时间:
2013-8-22 11:10
标题:
一道练习题
本帖最后由 张聪珉 于 2013-8-23 13:39 编辑
复制一个带内容的文件夹到某个盘符(假设E盘)根目录下,以下是我写的代码,大家帮忙看下我这个做法有哪些地方不妥,还有注释那部分我填字符串“E:\\”报异常啊,如果换成“E:\\ java”它就会创建一个java的文件,我郁闷啊。。。。。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
public class Copyfile {
private static String f;
/**
* @param args
*/
public static void main(String[] args) throws IOException{
File dir=new File("D:\\Java0806");
List<File> li=new ArrayList<File>();
fileToList(dir,li);
File file=new File();//这里我应该怎么填,才能复制到某个盘符或者文件夹里???????
writeToFile(li, file);
}
private static void writeToFile(List<File> li, File file) throws IOException {
// TODO Auto-generated method stub
BufferedOutputStream bufo = null;
BufferedInputStream bufi=null;
try {
bufo=new BufferedOutputStream(new FileOutputStream(file));
for(File f : li){
bufi=new BufferedInputStream(new FileInputStream(f));
byte[] b = new byte[1024];
bufi.read(b);
bufo.write(b, 0, b.length);
}
} catch (IOException e) {
// TODO: handle exception
throw e;
} finally{
try{
if(bufo!=null)
bufo.close();
}
catch (IOException e){
throw e;
}
try{
if(bufi!=null)
bufi.close();
}
catch (IOException e){
throw e;
}
}
}
private static void fileToList(File dir, List<File> li) {
// TODO Auto-generated method stub
File[] files = dir.listFiles();
for(File file:files){
if(file.isFile())
li.add(file);
else
fileToList(file,li);
}
}
}
复制代码
作者:
gudao20080
时间:
2013-8-22 13:41
你的程序不能达到复制文件夹的效果:
1.你没有获取要复制的文件夹里的文件和名称和文件夹的名称
2。fileToList(File dir, List<File> li)这个函数没有返回值,你获取到了文件,但是不能用
3.判断 判断目标文件目录是否存在,并进行处理
作者:
小冰块
时间:
2013-8-22 19:00
我直接写d:\\没有问题,可以拷过去,但是不会创建你要拷贝的那个文件夹,只会把你要拷贝的文件夹下的所有内容都放到根目录里面。。。
我把我写的代码贴给你吧,你可以看
import java.io.*;
public class copyDir {
public static void main(String[] args) throws IOException {
File file = new File("c:\\program files\\java");
File file2 = new File("d:\\");
if (!(file.exists() && file.isDirectory()))
{
System.out.println("该目录不存在");
return;
}
copyDir(file,file2);
System.out.println("Dirctor Copy is complied!");
}
public static void copyDir(File file,File file2) throws IOException{
File[] files = file.listFiles();
//遍历目标文件夹
for (File f : files)
{
System.out.println(f.getName());
//如果是子文件夹,则递归调用本方法
if (f.isDirectory())
{
//在目标文件夹下建立同名子目录
String path = file2.getAbsolutePath();
File file3 = new File(path,f.getName());
System.out.println("mkdir :"+file3.getName()+" is "+file3.mkdirs());
copyDir(f,file3);
}
//如果不是文件夹,而是文件,则创建新同名文件,然后进行复制
else
{
System.out.println("copying...");
String name = f.getName();
File f2 = new File(file2,name);
copyFile(f,f2);
}
}
}
//拷贝文件的方法
public static void copyFile(File f1, File f2) throws IOException{
BufferedReader bufr =
new BufferedReader(new InputStreamReader(new FileInputStream(f1)));
BufferedWriter bufw =
new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f2)));
String line = null;
while((line = bufr.readLine())!=null)
{
bufw.write(line);
}
bufw.close();
bufr.close();
}
}
复制代码
一下。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2