黑马程序员技术交流社区

标题: 看到好多人说面试写了文件复制,就自己写了个,仅供参考 [打印本页]

作者: 苗润    时间: 2014-7-20 23:58
标题: 看到好多人说面试写了文件复制,就自己写了个,仅供参考
  1. import java.io.*;
  2. class CopyFile
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 FileInputStream fis = new FileInputStream(new File("D:\\coder\\Cat.class"));
  7.                 FileOutputStream fos = new FileOutputStream(new File("D:\\coder\\复件.class"));
  8.                 BufferedOutputStream bos = new BufferedOutputStream(fos);
  9.                 int len = 0;
  10.                 byte[] buf = new byte[1024];
  11.                 while((len = fis.read(buf))!=-1)
  12.                 {
  13.                         bos.write(buf,0,len);
  14.                         bos.flush();
  15.                 }
  16.                 fis.close();
  17.                 fos.close();
  18.                
  19.         }
  20. }

复制代码



作者: 付江涛    时间: 2014-7-21 00:56
应该try一下
作者: meibinlove    时间: 2014-7-21 06:22
面试写文件复制?不是基础测试就有吗?
作者: huanglyhf    时间: 2014-7-21 08:59
基础测试 你I可以边查资料边写程序啊!面试的时候就靠脑子里的记忆
作者: 乐此不疲    时间: 2014-7-21 13:39
给读的流套上一个BufferedReader,使用readLine()
作者: a6511631    时间: 2014-7-21 14:18
面试写的不是将某个文件夹中的所有文件复制到其他盘中吗?
作者: xiaogh    时间: 2014-7-21 14:41

  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.FileWriter;
  8. import java.io.IOException;
  9. import java.io.BufferedWriter;

  10. import com.xgh.util.P;

  11. /**
  12. * 题目:设计一个带缓冲流的文件复制类
  13. * @author xiaogh
  14. */
  15. public class CopyFileByBuffered {
  16.        
  17.         public static void main(String[] args){
  18.                
  19. //                File file1 = new File("E:\\音乐\\钢琴\\Maksim Mrvica - Hana's Eyes.mp3");
  20.                 File file1 = new File("F:\\others");
  21.                 File file2 = new File("H:\\培训后需要材料列表\\南航运行网截图");
  22.                 CopyFileUtil util = new CopyFileUtil();
  23.                 long start = System.currentTimeMillis();
  24.                 util.copyAll(file1, file2);
  25.                 P.rintln(System.currentTimeMillis() - start + "毫秒");
  26.         }
  27. }

  28. class CopyFileUtil{
  29.        
  30.         /**
  31.          * 可以copy文件及文件夹
  32.          * @param sourceFile        源文件或者源文件夹
  33.          * @param targetFile        目标文件夹
  34.          */
  35.         public void copyAll(File sourceFile, File targetFile){
  36.                
  37.                 if(sourceFile.isFile()){
  38.                         copyFile(sourceFile, targetFile);
  39.                 }
  40.                 else{
  41.                         copyFolder(sourceFile, targetFile);
  42.                 }
  43.         }
  44.        
  45.         //这个方法只能copy文件
  46.         private void copyFile(File sourceFile, File targetFile){
  47.                
  48.                 BufferedInputStream bis = null;
  49.                 BufferedOutputStream bos = null;
  50.                 BufferedWriter bw =  null;
  51.                
  52.                 try {
  53.                         bis = new BufferedInputStream(new FileInputStream(sourceFile));
  54.                         bos = new BufferedOutputStream(new FileOutputStream(targetFile.getAbsolutePath() + File.separator + sourceFile.getName()));
  55.                        
  56.                         //查看copy之后的文件位置
  57.                         String str = targetFile.getAbsolutePath() + File.separator + sourceFile.getName();
  58.                         P.rintln(str);
  59.                         File file = new File("D:\\copy.log");
  60.                         if(!file.exists()){
  61.                                 file.createNewFile();
  62.                         }
  63.                        
  64.                         //将copy记录写入日志
  65.                         bw = new BufferedWriter(new FileWriter(file, true));
  66.                         bw.write(sourceFile.getAbsolutePath() + " --> " + str);
  67.                         bw.newLine();
  68.                         bw.flush();
  69.                        
  70.                         //copy文件
  71.                         byte[] bs = new byte[1024];
  72.                         int len = 0;
  73.                         while((len = bis.read(bs)) != -1){
  74.                                 bos.write(bs, 0, len);
  75.                                 bos.flush();
  76.                         }
  77.                        
  78.                 } catch (FileNotFoundException e) {
  79.                         e.printStackTrace();
  80.                 } catch (IOException e) {
  81.                         e.printStackTrace();
  82.                 } finally {
  83.                         if(bis != null){
  84.                                 try{
  85.                                         bis.close();
  86.                                 } catch(IOException ex){
  87.                                         ex.printStackTrace();
  88.                                 }
  89.                         }
  90.                         if(bos != null){
  91.                                 try{
  92.                                         bos.close();
  93.                                 } catch(IOException ex){
  94.                                         ex.printStackTrace();
  95.                                 }
  96.                                
  97.                         }
  98.                         if(bw != null){
  99.                                 try{
  100.                                         bw.close();
  101.                                 } catch (IOException ex){
  102.                                         ex.printStackTrace();
  103.                                 }
  104.                                
  105.                         }
  106.                 }
  107.         }
  108.        
  109.         //copy文件和文件夹
  110.         private void copyFolder(File sourceFile, File targetFile){
  111.                
  112.                 //预先将文件夹创建
  113.                 File f = new File(targetFile.getAbsolutePath() + File.separator + sourceFile.getName());
  114.                 f.mkdir();
  115.                
  116.                 File[] files = sourceFile.listFiles();
  117.                 for(File file : files){
  118.                         if(file.isFile()){
  119.                                 copyFile(file, f);
  120.                         }
  121.                         else{
  122.                                 copyFolder(file, f);
  123.                         }
  124.                 }
  125.         }
  126. }
复制代码


这个是我看了题目试敲的。
作者: tianleboy    时间: 2014-7-21 14:59
xiaogh 发表于 2014-7-21 14:41
这个是我看了题目试敲的。

太厉害了~~~
作者: 黑马-蒋振军    时间: 2014-7-21 16:04
一是没有自己对异常进行单独try处理,二是没有注释




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2