簡單的文件複製功能

簡單的文件複製功能

  package IO;

import java.io.*;

/**
 * @anthor 
 * @create 2018-12-08-20:20
 */
public class MyCopyFile {

    public static void main(String[] args) {
        //源
        String s1 = "";
        File f1 = new File(s1);
        //目的地
        String s2 = "";
        File f2 = new File(s2);
        new MyCopyFile().Copy(f1, f2);
    }

    public void Copy(File f1, File f2) {

        //f1不存在
        InputStream is = null;
        OutputStream os = null;
        int len = -1;

        if ((f1 == null || !f1.exists()) || (f2 == null)) {
            System.out.println("源地址或目標地址不存在");
        } else {
            try {
                if (f1.isFile() ) {
                    //FileInputStream不能打開文件夾目錄
                    is = new FileInputStream(f1);
                    if(f2.isDirectory())
                    {
                        File fff2=new File(f2,f1.getName());
                        fff2.createNewFile();
                        os = new FileOutputStream(fff2);
                    }else{
                        //f2是個文件
                        os=new FileOutputStream(f2);
                    }

                    //不能用Byte的包裝類
                    byte[] buffer = new byte[1024 * 10];
                    while ((len = is.read(buffer)) != -1) {
                        //寫
                        os.write(buffer, 0, len);
                    }
                } else if (f1.isDirectory()) {
                    //f2地址存在且f2是個文件
                    File ff2=null;
                    if(f2.isFile() && f2!=null){
                        ff2= new File(f2.getParent());
                        ff2.mkdirs();
                    }else {
                        ff2 = new File(f2, f1.getName());
                        ff2.mkdirs();
                    }
                    for (File ff1 : f1.listFiles()) {
                        System.out.println(ff1.getName());
                        Copy(ff1, ff2);
                    }

                } else {
                    System.out.println("無法拷貝");
                }

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                //在沒有判斷是否爲null時,會重複多次關閉;
                    if(null!=is ){
                        is.close();
                    }
                    if(null !=os){
                        os.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

在.close()時沒有判斷是否爲Null會重複執行close()導致空指針異常;

暫時還未理解爲什麼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章