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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱东方 中级黑马   /  2012-8-6 23:45  /  2236 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package FileTest;

  2. import java.io.File;
  3. import java.io.IOException;

  4. public class ShowDir {

  5.         /**
  6.          * @param args
  7.          * @throws IOException
  8.          */
  9.         public static void main(String[] args) throws IOException {

  10.                 /*
  11.                  * 需求:获取所有子目录中的所有内容,并移动到另一个文件夹里。不要目录,只要其中的文件。
  12.                  */
  13.                 File dir = new File("d://TDDOWNLOAD//qq相册");

  14.                 moveFile(dir);

  15.         }

  16.         public static void moveFile(File dir) throws IOException {

  17.                 System.out.println(dir.getName());
  18.                 File[] files = dir.listFiles();

  19.                 for (File f : files) {
  20.                         if (f.isDirectory()) {
  21.                                 moveFile(f);
  22.                         } else
  23.                                 System.out.println(f.getName());//这的代码应该怎么改

  24.                 }
  25.         }
  26. }
复制代码
相册里有多级目录,我想把每个目录中的文件取出来放到一个指定的文件夹中去。怎么办,求指点。

然后求一份最新的  自己手动整理的  IO流笔记。   最后全点的。

2 个回复

正序浏览
本帖最后由 孙飞 于 2012-8-7 02:00 编辑

我做了一下
package cn.itcast.day1;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class GetFileDemo {
/**
  * @param args
  */
           public static void main(String[] args) {
                 // TODO Auto-generated method stub
                  File file=new File("e:\\其它\\相片");//这是我相片存放的目录,你可以改成你的
                  List<String> list=new ArrayList<String>();
                  method(file,list);
                  BufferedInputStream bis=null;
                  BufferedOutputStream bos=null;
                  try {
                            Iterator<String> it=list.iterator();
                            while(it.hasNext()){
                                     String s=it.next();
                                     int a=s.lastIndexOf("\\");
                                    String subs=s.substring(a);          //取出原文件的文件名
                                    bos=new BufferedOutputStream(new FileOutputStream("e:\\其它\\2\\"+subs));    //用目的目录加上原文件名做为要输出的路径
                                    bis=new BufferedInputStream(new FileInputStream(s));
                                    byte[] by=new byte[1024];
                                    int len=0;
                                    while ((len=bis.read(by))!=-1) {                   //进行读写
                                              bos.write(by,0,len);
                                              bos.flush();
                                    }
                          }
   
                  } catch (IOException e) {
                          // TODO: handle exception
                          e.printStackTrace();
                 }
                 finally{                                                             //关闭流
                                 try {
                                                if (bis!=null) {
                                                           bis.close();
                                                }
                                  } catch (IOException e2) {
                                                // TODO: handle exception     //下面的蓝体字注释部分中的arr应该是arr再加上中括号里面加 i ,在那个部位改不过来,
                                              e2.printStackTrace();         //改了一保存就又没了,在这里说一下吧改下面那个字体 改不少时间,不改了,希望你知道吧
                                  }
                                  try {
                                               if (bos!=null) {
                                                            bos.close();
                                                }
                                 } catch (IOException e2) {
                                           // TODO: handle exception
                                           e2.printStackTrace();
                                }
                      }
            }
           public static void method(File file,List<String> list){            //定义一个功能 ,把封闭有源文件目录的对象传入,并传入一个集合
                     File[] arr=file.listFiles();                                             //把源目录中的文件返回成数组,并对数组进行遍历,用递归的方法把所有的文件路径存入集合中
                    for (int i = 0; i < arr.length; i++) {
                             if (arr.isHidden()&&arr.isDirectory()) {        //这里和字体,不知道怎么了,搞不好了,这里还有下面的arr应该是arr    不知怎么了,改过一保存就没了
                                          method(arr,list);
                             }
                             else {
                                             list.add(arr.getAbsolutePath());
                             }
   
                  }
         }
}
回复 使用道具 举报
给你思路,代码自己写
1。利用opendir(char* dirname)返回一个DIR*;
2。利用readdir(DIR* *dp)返回一个struct dirent;
3.利用循环从struct dirent中取出文件名。
4利用fstat(char* filename,struct stat* buf)得到struct stat*
5在struct stat里可以找到所有你想要的关于文件的信息。

在遍历字目录是应该利用sprintf()确定文件名
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马