A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这个题这么做,大家。
把C盘中的一个文件夹里面的所有文件(包括子文件夹)拷贝到D盘里面的文件夹里边,用IO流怎么做(写思路,写代码,写注释)。



12 个回复

倒序浏览
  1. import java.io.*;
  2. class CopyWenJianJia
  3. {
  4.         public static void main(String[] args)throws Exception
  5.         {
  6.                 //源文件夹
  7.                 String yuan = "C:\\nimeizide";
  8.                 //目的地
  9.                 String mudi = "D:\\nimeizide";
  10.                 //建立目标文件夹
  11.                 (new File(mudi)).mkdirs();
  12.                 //获取源文件夹当下的文件或目录
  13.                 File[] files = (new File(yuan)).listFiles();
  14.                 for(File file : files)
  15.                 {
  16.                         if(file.isDirectory())
  17.                         {
  18.                                 String yuanDir = yuan + "\\" + file.getName();
  19.                                 String mudiDir = mudi + "\\" + file.getName();
  20.                                 //复制目录
  21.                                 copyDir(yuanDir, mudiDir);
  22.                         }
  23.                         else
  24.                         {
  25.                                 copyFile(file, new File(mudi + "\\" + file.getName()));
  26.                         }
  27.                 }

  28.         }
  29.         //复制文件夹
  30.         public static void copyDir(String yuanDir, String mudiDir)throws Exception
  31.         {
  32.                 (new File(mudiDir)).mkdirs();
  33.                 File[] files = (new File(yuanDir)).listFiles();
  34.                 for(File file : files)
  35.                 {
  36.                         if(file.isFile())
  37.                         {
  38.                                 File yuanFile = file;//源文件
  39.                                 File mudiFile = new File(new File(mudiDir).getAbsolutePath() + "\\" + file.getName());
  40.                                 copyFile(yuanFile, mudiFile);
  41.                         }
  42.                         else
  43.                         {
  44.                                 String yuanJia = yuanDir + "\\" + file.getName();
  45.                                 String mudiJia = mudiDir + "\\" + file.getName();
  46.                                 copyDir(yuanJia, mudiJia);
  47.                         }
  48.                 }
  49.         }
  50.         //复制文件
  51.         public static void copyFile(File yuanFile, File mudiFile)throws Exception
  52.         {
  53.                 BufferedInputStream buis = new BufferedInputStream(new FileInputStream(yuanFile.getAbsoluteFile()));
  54.                 BufferedOutputStream buos = new BufferedOutputStream(new FileOutputStream(mudiFile.getAbsoluteFile()));
  55.                 byte[] buf = new byte[1024];
  56.                 int len;
  57.                 while((len = buis.read(buf)) != -1)
  58.                 {
  59.                         buos.write(buf, 0, len);
  60.                         buos.flush();
  61.                 }
  62.                 buis.close();
  63.                 buos.close();
  64.         }

  65. }
复制代码
回复 使用道具 举报
这样做有什么用么?
回复 使用道具 举报
学习了别人之后,自己写的,看看吧
http://bbs.itheima.com/thread-138396-1-1.html
回复 使用道具 举报
孙小亚 发表于 2014-8-19 16:27
学习了别人之后,自己写的,看看吧
http://bbs.itheima.com/thread-138396-1-1.html

谢谢啊,这是一个面试题
回复 使用道具 举报
厉害。。。。
回复 使用道具 举报
本帖最后由 sanchibing 于 2015-1-14 23:21 编辑
  1. package com.itheima;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;

  8. public class test04 {

  9.         public static void main(String[] args) throws IOException {
  10.                 // TODO 自动生成的方法存根
  11.                 File f1 = new File("c:\\eastmoney");
  12.                 File f2 = new File("d:\\eastmoney");
  13.                 copyDir(f1,f2);

  14.         }

  15.         private static void copyDir(File f1, File f2) throws IOException {
  16.                 // TODO 自动生成的方法存根
  17.                 f2.mkdirs();
  18.                 File [] files = f1.listFiles();
  19.                 for(File f:files){
  20.                         if(f.isDirectory()){
  21.                                 File f3= new File(f2.getAbsolutePath()+"\\"+f.getName());
  22.                                 copyDir(f,f3);
  23.                         }
  24.                         else{
  25.                                 BufferedInputStream bfis = new BufferedInputStream(new FileInputStream(f));
  26.                                 BufferedOutputStream bfos = new BufferedOutputStream(new FileOutputStream(f2.getAbsolutePath()+"\\"+f.getName()));
  27.                                 int buf;
  28.                                 byte [] bufarr = new byte [1024*5];
  29.                                 while((buf=bfis.read(bufarr))!=-1){
  30.                                         bfos.write(bufarr,0,buf);
  31.                                 }
  32.                                 bfos.close();
  33.                                 bfis.close();
  34.                         }
  35.                 }
  36.         }
  37.    
  38. }
复制代码

点评

你这个只能复制单级文件夹下面的文件,多级文件夹中的文件复制不了.一楼的是正确的  发表于 2015-6-4 23:01
回复 使用道具 举报
轩辕苍穹 发表于 2014-8-19 13:18
这样做有什么用么?

电脑里面复制文本的底层操作你知道么
回复 使用道具 举报
  1. package admission.test;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;

  7. /**
  8. * File IO 递归
  9. *                 实现某个文件夹复制
  10. * @author Ethan丶
  11. *       
  12. */
  13. public class Test_IOCopyToDirs {
  14.                 /*
  15.                  * 思路:1 因为文件夹是一个层次目录,要复制多层文件夹,使用递归比较方便
  16.                  *            2.使用File的listFiles方法可以获得该文件目录下的文件列表,遍历
  17.                  *                该列表目录就获取该目录的listFiles,直到全部遍历结束
  18.                  *                3.文件的复制,遍历的同时,在目标目录下创建同名目录并复制普通文件
  19.                  *                        思考:新旧文件和文件夹的路径层次同步问题
  20.                  *                                 当listFile后,新旧文件或文件夹有了一个层次的差距,要明确旧文件的路径
  21.                  *                       
  22.                  */
  23.         public static void main(String[] args) throws Exception{
  24.                 String oldpath="e:\\dirs1";
  25.                 String newpath="e:\\dirs2";
  26.                
  27.                 File fs1 = new File(oldpath);
  28.                 File fs2 = new File(newpath);
  29.                
  30.                 listDirs(fs1,fs2);
  31.                 //改名方法
  32.                 renameFile(fs1);
  33.         }
  34.         //递归文件夹的创建
  35.         public static void listDirs(File fs1, File fs2) throws Exception {
  36.                 if (!fs1.exists()) {
  37.                         System.out.println("原文件夹不存在");
  38.                         return;
  39.                 }
  40.                 if(!fs2.exists()||!fs2.isDirectory()){
  41.                                 fs2.mkdirs(); //创建多级
  42.                 }
  43. //                File fs = new File(fs1.getPath()+"\\"+fs2.getName());
  44. //                fs.mkdir();//在目标目录下创建一个与待复制文件夹同名的目录
  45.                
  46.                 //遍历目录下文件  碰到目录递归
  47.                 File[] files=fs1.listFiles();
  48.                 for(File file:files){
  49.                         if(file.isDirectory()){
  50.                                 listDirs(file,fs2);
  51.                         }else{
  52.                                 copyFile(file,fs2);
  53.                         }
  54.                 }
  55.         }
  56.         //文件的复制
  57.         public static void copyFile(File file,File fs) throws Exception{
  58.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
  59. //                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream
  60. //                                (newpath.getPath()+"\\"+oldpath.getPath()));
  61.                 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fs));
  62.                 int b=0;
  63.                 while((b=bis.read())!=-1){
  64.                         bos.write(b);
  65.                 }
  66.                 bis.close();
  67.                 bos.close();
  68.         }
  69.         //文件改名
  70.         public static void renameFile(File fs1){
  71.                 File[] files = fs1.listFiles();
  72.                 for(File file:files){
  73.                         if(fs1.isDirectory()){
  74.                                 renameFile(file);
  75.                         }else{
  76.                                 if(file.getName().endsWith(".java")){
  77.                                         System.out.println(file.getPath().replaceAll(".java", ".txt"));
  78.                                         file.renameTo(new File(file.getPath().replaceAll(".java", ".txt")));
  79.                                 }
  80.                         }
  81.                 }
  82.         }
  83. }
复制代码
回复 使用道具 举报
回复 使用道具 举报
感谢分享,楼主好人!O(∩_∩)O~
回复 使用道具 举报
package 输入输出;
import java.io.*;
public class copyfile {
        public static void main(String[]args) throws Exception{
                                //File file=new File("C:\\dd");
                                //File fil=new File("D:\\target");
                String yuan="C:\\dd";
                String mudi="D:\\target"
;
                copy1(yuan,mudi);
        /*        new File(mudi).mkdirs();
                File file2=new File(yuan);
                File []file1=file2.listFiles();
                for(File file:file1){
                        if(file.isDirectory()){
                                String yuan1=yuan+"\\"+file.getName();
                                String mudi1=mudi+"\\"+file.getName();
                                copy1(yuan1,mudi1);
                        }
                        else{File fil=file;
                        File fil2=new File(mudi+"\\"+file.getName());
                                copy(fil,fil2);
                        }
                       
                }*/
               
        }
        static public void copy1(String n,String n1) throws Exception{
                new File(n1).mkdirs();
                //new File(mudi).mkdirs();
                File file2=new File(n);
                File []file1=file2.listFiles();
                for(File file:file1){
                        if(file.isDirectory()){
                                String yuan1=n+"\\"+file.getName();
                                String mudi1=n1+"\\"+file.getName();
                                copy1(yuan1,mudi1);
                        }
                        else{File fil=file;
                        File fil2=new File(n1+"\\"+file.getName());
                                copy(fil,fil2);
                        }
                       
                }
               
        }
static  public void copy(File file1,File fil) throws Exception{
        BufferedInputStream ii=new BufferedInputStream(new FileInputStream(file1));
        BufferedOutputStream ll=new BufferedOutputStream(new FileOutputStream(fil));
int len;
        while((len=ii.read())!=-1){
                ll.write(len);
        }
}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马