1. 程式人生 > >新長城 鬱悶的一道面試題(把C盤檔案複製到D盤)

新長城 鬱悶的一道面試題(把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);

}

}

}

}

}

}