手记

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

最近在由于准备实习,在学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人推荐
随时随地看视频
慕课网APP

热门评论

一个ndk就轻松搞定的事,非得这么麻烦

感谢分享

查看全部评论