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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 thoris 于 2015-6-1 19:30 编辑
  1. /*
  2.           官方提供的张孝祥老师的高新技术公有56个文件夹
  3.           每个文件夹里有一个视频
  4.           看视频当然要连续播放,一个接一个,在不同的文件夹中不能连续播放
  5.           也不方便同时操作(比如显示视频时长,文件大小等)
  6.          
  7.           所以有了以下需求:
  8.                   将某一个文件夹中多个子文件夹的同类型文件提取到同一个文件夹。
  9.          
  10.           涉及知识点
  11.           1、递归遍历文件夹,获取相同后缀文件
  12.           2、字符串切割,获取文件名
  13.           3、IO字节流、字符流读取
  14.            
  15. */
  16. import java.io.*;
  17. import java.util.*;

  18. public class AviFileCopy {

  19.         public static void main(String[] args) throws Exception {
  20.                 File f=new File("F:\\黑马程序员_张孝祥_Java高新技术");
  21.                 ArrayList<File> al=new ArrayList<File>();
  22.                 AVIList(f,al);
  23.                 writerAVI(al) ;               

  24.         }
  25.         public static void AVIList(File f,List<File> list)
  26.         {
  27.                 File [] files=f.listFiles();
  28.                 for(File file:files)
  29.                 {
  30.                         if(file.isDirectory())
  31.                                 AVIList(file,list);
  32.                         else
  33.                         {
  34.                                 if(file.getName().endsWith(".avi"))//迭代获取后缀为avi的文件
  35.                                 {
  36.                                         list.add(file);//添加到集合中
  37.                                 }
  38.                         }
  39.                 }
  40.         }
  41.         public static void writerAVI(List<File> list) throws Exception
  42.         {
  43.                 //先测试将文件名写入到文本中
  44.                 BufferedWriter bufw=new BufferedWriter(new FileWriter("F:\\黑马程序员_张孝祥_Java高新技术\\avi.txt"));
  45.                 BufferedInputStream in=null;
  46.                
  47.                 for(File f:list)
  48.                 {
  49.                         String path=f.getAbsolutePath();
  50.                         String [] arr=path.split("\\\\");//java代码中的路径是\\  实际打印出来是\  切割的时候要使用\\\\
  51.                         String name=arr[arr.length-1];//获得了文件名
  52.                         
  53.                         bufw.write(name);//得到文本目录 (可选)
  54.                         bufw.newLine();
  55.                         bufw.flush();
  56.                
  57.                         //写入文件地址
  58.                         BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream("F:\\黑马程序员_张孝祥_Java高新技术\\"+name));
  59.                         //读取原文件
  60.                         in=new BufferedInputStream(new FileInputStream(f));
  61.                         
  62.                         byte [] buf=new byte[1024*1024];
  63.                         int len=0;
  64.                         while((len=in.read(buf))!=-1)
  65.                         {
  66.                                 out.write(buf, 0, len);
  67.                         }                        
  68.                
  69.                 }
  70.                 bufw.close();
  71.                 in.close();                                
  72.                                 
  73.         }

  74. }
复制代码




0601 补充:
看了7楼的回复发现自己还是太弱了哈    新手写的  只求实现功能  无视阅读性和理解性   这一块还是需要加强。
另外想说的是     虽然目前只是入了个门  以后很难说是不是真的能成为挣钱的技术   但是编程确实是很考验理解和分析能力 非常锻炼个人思维  学点编程总是好的。

13 个回复

倒序浏览
辛苦了  赞一个
回复 使用道具 举报
还不错,,,不过你程序还没写完,,我已经手工移动完成了
回复 使用道具 举报
不是说你移动快就说人家写的没用
回复 使用道具 举报
as604049322 发表于 2015-5-31 20:30
还不错,,,不过你程序还没写完,,我已经手工移动完成了

哈   这个可以通用的  我发现那连个7k题也是这样  改一下地址就好了
平时还有下一些动画  如果是用bt的  经常都会带着文件夹  如果累计很多集的话 也可以一次性提取出来
回复 使用道具 举报
不错,太好了,以后肯定有用的
回复 使用道具 举报
本帖最后由 as604049322 于 2015-5-31 23:05 编辑
l598790586 发表于 2015-5-31 20:42
不是说你移动快就说人家写的没用

其实我只是想表达楼主的代码写的很不好。。。
下面是我写的:

  1. package junit.test;

  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import java.io.PrintStream;

  5. public class RemoveFile {

  6.         public static void main(String[] args) throws FileNotFoundException {

  7.                 File file = new File("E:\\yunVideo\\张孝祥Java高新技术");
  8.                 File descDir = new File("E:\\yunVideo\\张孝祥Java高新技术");
  9.                 PrintStream ps = new PrintStream(new File(descDir, "list.txt"));
  10.                 listFile(file, descDir, ps);
  11.         }

  12.         public static void listFile(File file, File descDir, PrintStream ps) {

  13.                 if (!file.isHidden() && file.isDirectory()) {
  14.                         File[] files = file.listFiles();
  15.                         for (File f : files) {
  16.                                 listFile(f, descDir, ps);
  17.                         }
  18.                 } else if (file.isFile()) {
  19.                         String name = file.getName();
  20.                         if (name.endsWith(".avi")) {
  21.                                 ps.println(new File(descDir, name) + ":");
  22.                                 ps.println(file.renameTo(new File(descDir, file.getName())));
  23.                         }
  24.                 }

  25.         }

  26. }


复制代码

回复 使用道具 举报
thoris 中级黑马 2015-5-31 23:10:24
8#
as604049322 发表于 2015-5-31 23:02
其实我只是想表达楼主的代码写的很不好。。。
下面是我写的:

高手
新手就是容易缺少整体感   没有好的代码风格
这一块估计是新手最难提高的地方了。
回复 使用道具 举报
这是面试题吗?
回复 使用道具 举报
嗯,赞一个
回复 使用道具 举报
楼主学的很深入啊
回复 使用道具 举报
看来是高手了啊
回复 使用道具 举报
学习学习!
回复 使用道具 举报
as604049322 发表于 2015-5-31 23:02
其实我只是想表达楼主的代码写的很不好。。。
下面是我写的:

高手,是我理解错了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马