新長城 鬱悶的一道面試題(把C盤檔案複製到D盤)
面試的時候,這道題本來是可以拿下的,一下子老師問思路,哎就知道有怎麼回事,結果思路說不出來。
/*
* 需求:(把D盤檔案複製到C盤)
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/*
思路
1、通過碟符或者碟符下的所以檔案和目錄。
2、對碟符下的檔案進行遍歷,遍歷的過程中定義盤條件。
3、如果是檔案,直接複製,如果是目錄,那就對目錄進行迭代。
4、如果目錄中的檔案還是目錄,那就對目錄進行遞迴操作。
5、關閉所有流資源。
*/
public class Test{
public static void main(String[] args)throws IOException{
copyRoot(new File("D:\\"),new File("C:\\"));
}
/*
複製檔案方法
*/
public static void copyFile(File dest,File src)throws IOException{
InputStream ips = new FileInputStream
(src);OutputStream ops = new FileOutputStream(dest);
byte[] buf =new byte[1024];
int len = 0;
while((len = ips.read(buf))!=-1){
ops.write(buf, 0, len);
}
ips.close();
ops.close();
}
/*
複製目錄下的檔案。
*/
public static void copyDir(File dest,File src)throws IOException
{dest.mkdirs();
File []dirAndFile = src.listFiles();
for(File dirOrFile : dirAndFile){
if(dirOrFile.isFile()){
copyFile(new File(dest.getAbsolutePath()+"\\"+dirOrFile.getName()),
newFile(dirOrFile.getAbsolutePath()));
}
else if(dirOrFile.isDirectory()){
copyDir(newFile(dest.getAbsolutePath()+"\\"+dirOrFile.getName()),
newFile(dirOrFile.getAbsolutePath()));
}
}
}
/*
複製整個碟符
*/
public static void copyRoot(File dest,File src)throws IOException{
File[] dirAndFile = src.listFiles();
if(src.exists()){
for(File dirOrFile : dirAndFile){
if(!dirOrFile.isHidden()){
if(dirOrFile.isFile()){
File destFile =
new File(dest.getAbsolutePath()+"\\"+dirOrFile.getName());
File srcFile =
newFile(src.getAbsolutePath()+"\\"+dirOrFile.getName());
copyFile(destFile,srcFile);
}
else if(dirOrFile.isDirectory()){
File destDir =
newFile(dest.getAbsolutePath()+"\\"+dirOrFile.getName());
File srcDir =
newFile(src.getAbsolutePath()+"\\"+dirOrFile.getName());
copyDir(destDir,srcDir);
}
}
}
}
}}