簡單的文件複製功能
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()導致空指針異常;
暫時還未理解爲什麼