黑马程序员技术交流社区
标题:
遍历文件,Io读取。。。
[打印本页]
作者:
苏乞儿
时间:
2014-9-28 21:56
标题:
遍历文件,Io读取。。。
今天看张老师的视频,麻烦,不知怎么用暴风影音添加目录([size=14.3999996185303px]是一个文件里只有一个视频),老是一个一个的添加视频。想想老师讲的IO流,递归遍历文件。
想何不自己写个程序,将视频文件同一Copy到指定目录呢?哈哈,一个晚自习啊(我是菜鸟我怕谁),试了试看着还行,请大家指点一下啊。
package cn.itcast.CopyAvi;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/*
* 将G:\BaiduYunDownload\张孝祥Java高新技术中的avi文件复制到F:\java视频资料中去,
* 并新建 张孝祥Java高新技术文件夹中
* 思路:
* 1.递归遍历源目录
* 2.判断文件是文件夹还是文件。若是文件则判断是否是.avi结尾。若不是文件,则继续执行1
* 3.文件若以.avi结尾。则调用本地IO技术进行读写操作。
*/
public class CopyAvi {
public static void main(String[] args) throws Exception {
long start =System.currentTimeMillis();
// 现将源文件和目标文件封装成File对象
File srcDir = new File("G:\\BaiduYunDownload\\张孝祥Java高新技术");
File tarDir = new File("F:\\java视频资料\\张孝祥Java高新技术");
if(!tarDir.exists())
tarDir.mkdirs();
printSrcDir(srcDir, tarDir);
long end=System.currentTimeMillis();
System.out.println(end-start);
}
// 写一个遍历源目录的方法
private static void printSrcDir(File srcDir, File tarDir) throws Exception {
File[] files = srcDir.listFiles();
// 遍历元目录
for (File file : files) {
if (file.isDirectory()) {
printSrcDir(file, tarDir);
} else {
if (file.getName().endsWith(".avi")) {
File newTar = new File(tarDir, file.getName());
copyFiles(file, newTar);
}
}
}
}
private static void copyFiles(File file, File newTar) throws Exception {
// 读写文件
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(newTar);
int len = 0;
byte[] arr = new byte[1024];
while ((len = fis.read(arr)) != -1) {
fos.write(arr, 0, len);
}
fos.close();
fis.close();
}
}
复制代码
作者:
darkads
时间:
2014-9-29 10:25
本帖最后由 darkads 于 2014-9-29 10:29 编辑
很不错,可以达到实际效果,使用所学的知识解决实际问题,这样学习起来才更有动力,更有成就感,加油!
1.copy文件时候最好使用BufferedInputstream和BufferedOutputStream,这样速度快一些
我运行了一下,不使用缓冲的话,20多个文件第一次花了6秒多,一度让我认为陷入死循环了,再次运行由于文件系统的缓存大概在2.5秒左右,使用缓冲第一次0.8秒,其后在0.6秒
由于IO流在绝大多数的时候是程序运行的瓶颈,所以在文件复制时,一般要使用Buffered流,如果文件较大数量不多,使用FileChannel速度会再快一些
2.还有在对方法注释时,不要使用//,而是/**,回车,Eclipse会自动补全剩下的,不仅看起来更美观,而且在文档中这是一个方法的标准注释
/**
*
* @param file
* @param newTar
* @throws Exception
*/
复制代码
作者:
苏乞儿
时间:
2014-9-29 18:52
darkads 发表于 2014-9-29 10:25
很不错,可以达到实际效果,使用所学的知识解决实际问题,这样学习起来才更有动力,更有成就感,加油!
1.c ...
太感谢了。谢谢大神的指导!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2