为了账号安全,请及时绑定邮箱和手机立即绑定

复制一个文件夹里的文件到另一个文件夹 (使用递归的方法实现)

最近在由于准备实习,在学android,也会用到Java,所以想实现复制文件夹的功能,当然也参考了别人的代码。这里是我参考的网址:http://blog.csdn.net/etzmico/article/details/7786525/

我发这个文章的主要目的是为了永久性保存我的这个小小成功,虽然参考了不少,但是我搞明白了原理。下一篇用队列的方式又写了一个源文件夹里的所有文件到一个目标目录下的代码,这个目标目录下只有文件,没有文件夹。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyFile {

//public class MainActivity extends Activity {

    //Button copyButton;

    static String  copy_From ="E:\\amu1";//源文件
    static String  copy_TO="E:\\amu2";  //目标文件
    public static void main(String args[]) throws IOException {

// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
// copyButton=(Button) findViewById(R.id.button1);
//
// copyButton.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View arg0) {
// // TODO Auto-generated method stub

                    /*如果SD卡已经插入,则正常运行
                     * 否则抛出错误
                     * 
                     * 
                     */
                    (new File(copy_TO)).mkdirs(); // 不存在就新建目标文件

                    File [] get_From=(new File(copy_From)).listFiles();  //获取源文件中的文件或目录

                    for (int i=0;i<get_From.length;i++) {
                        if(get_From[i].isFile()){

                            //调用复制文件的函数
                                String toFile = copy_TO +"/"+ get_From[i].getName();   //写的时候这里少了个/.导致不能复制
                                copy_File(get_From[i],new File (toFile));
                            }

                         if(get_From[i].isDirectory()){

                            //复制文件的目录
                            String from_Directory=copy_From+File.separator+get_From[i].getName();
                            String to_Directory=copy_TO+File.separator+get_From[i].getName();

                                copy_Directory(from_Directory,to_Directory);//调用复制文件夹的函数
                            } 

                        }

}

                //}
            //});

    private static void copy_Directory(String fromDirectory, String toDirectory)throws IOException {

            //if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

                // TODO Auto-generated method stub

                //新建目标文件

                new File(toDirectory).mkdirs();

                //获取文件夹或者文件目录

                File[] files=(new File(fromDirectory)).listFiles();
                for(int i=0;i<files.length;i++){
                    if(files[i].isFile()){
                        //如果是文件
                        File fromFile=files[i];

                        File toFile=new File(new File(toDirectory).getAbsolutePath()+File.separator+files[i].getName()); 
                        copy_File(fromFile, toFile);

                    }

                    if(files[i].isDirectory()){  //如果是文件夹

                        String  fromDir=fromDirectory+"/"+files[i].getName();
                        String  toDir=toDirectory+"/"+files[i].getName();
                        copy_Directory(fromDir, toDir);

                    }

                }

                //Toast.makeText(this, "复制成功", Toast.LENGTH_LONG).show();

            //}

            //Toast.makeText(this, "复制失败", Toast.LENGTH_LONG).show();

    }

    private static void copy_File(File from_File, File to_File) throws IOException {

            //if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

                // TODO Auto-generated method stub

                FileInputStream infile=new FileInputStream(from_File);//新建输入流
                BufferedInputStream inbuf=new BufferedInputStream(infile);//对输入流进行缓冲

                FileOutputStream outfile=new FileOutputStream(to_File);  //新建输出流
                BufferedOutputStream outbuf=new BufferedOutputStream(outfile);//对输出流进行缓冲

                //缓冲数组
                byte []  bt=new byte[2048];
                int len;
                while  ((len=inbuf.read(bt))!=-1) {

                    outbuf.write(bt, 0, len);

                }

                outbuf.flush();    //刷新缓冲

                infile.close();
                inbuf.close();

                outfile.close();
                outbuf.close();

                //Toast.makeText(this, "复制成功", Toast.LENGTH_LONG).show();
            //}

            //Toast.makeText(this, "复制失败", Toast.LENGTH_LONG).show();

        } 
        //Toast.makeText(this, "复制失败", Toast.LENGTH_LONG).show();

}

//
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// // Inflate the menu; this adds items to the action bar if it is present.
// getMenuInflater().inflate(R.menu.main, menu);
// return true;
// }

加粗文字

点击查看更多内容
9人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消