黑马程序员技术交流社区
标题:
帮忙改正下代码
[打印本页]
作者:
陈山
时间:
2012-11-19 11:32
标题:
帮忙改正下代码
本帖最后由 陈山 于 2012-11-20 22:29 编辑
需求:把当前文件夹中的 N 个文件夹中的avi视频剪切到当前文件中的一个新的文件夹里
我写的代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CutAVI {
/**
* 1.遍历avi文件 ,增强for,递归
* 2.拷贝avi文件到一个新的文件夹,FileInputStream,FileOutputStream
* 3.删除遍历的avi文件
*/
public static void main(String[] args) throws IOException {
File file=new File("E:\\test");//创建File实例,路径为当前文件夹路径
copyAndDelete(file);
}
public static void copyAndDelete(File file) throws IOException{//拷贝文件到新的文件夹,然后删除文件
File[] files=file.listFiles();//获取当前文件夹下的所有文件对象
for(File f:files){//遍历当前文件夹下所有文件和文件夹
if(f.isDirectory()){//如果文件对象是文件夹
copyAndDelete(f);//递归
}else{
if(f.getAbsolutePath().endsWith(".avi")){//如果文件的文件名以”.avi“结尾,拷贝文件到新的文件夹里面
FileInputStream fis=new FileInputStream(f);//创建输入流
String str="e:\\test\\newfloder\\"+f.getName();//拷贝后文件的路径
File newF=new File(str);//创建拷贝后的文件对象
if(!newF.exists()){//如果文件不存在
newF.createNewFile();//创建文件
}
FileOutputStream fos=new FileOutputStream(newF);//创建输出流
//拷贝
byte [] bytes=new byte[1024];
int len=0;
while((len=fis.read(bytes))!=-1){
fos.write(bytes);
fos.flush();
}
fis.close();//关闭输入流
fos.close();//关闭输出流
f.delete();//删除源文件
}
}
}
}
}
问题:程序运行后,先把当前文件夹所有的avi文件复制到了当前文件夹里面一个新的文件夹,但是之后又把所有的avi文件删除了,包括新的文件夹里面的文件,问题在哪里呢?该怎么改进下?
作者:
李计伟
时间:
2012-11-19 12:55
本帖最后由 李计伟 于 2012-11-19 13:10 编辑
运行了一下你的程序有问题如果E:\\test 没有这个newfloder文件夹就会报错 Exception in thread "main" java.io.IOException: 系统找不到指定的路径。我运行你程序传个视频文件等了好久, 改了一下你的程序用缓冲流能快一点,把
delete()方法放外面就只删原文件了,改的我都用
//---------------------------标记了。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CutAVI{
public static void main(String[] args) throws IOException {
File file=new File("E:\\test");//创建File实例,路径为当前文件夹路径
copyAndDelete(file);
}
public static void copyAndDelete(File file) throws IOException{//拷贝文件到新的文件夹,然后删除文件
File[] files=file.listFiles();//获取当前文件夹下的所有文件对象
for(File f:files){//遍历当前文件夹下所有文件和文件夹
if(f.isDirectory()){//如果文件对象是文件夹
copyAndDelete(f);//递归
}else{
if(f.getAbsolutePath().endsWith(".avi")){//如果文件的文件名以”.avi“结尾,拷贝文件到新的文件夹里面
//--------------------------------------------------------------------------------------------------------------
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f)); //创建输入流
File newF=new File("E:\\test\\newfloder");//创建拷贝后的文件对象
if(!newF.exists()){//如果文件不存在
newF.mkdir();//创建文件夹
}
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\test\\newfloder\\"+f.getName())); //创建输出流
int b = 0;
while ((b = bis.read()) != -1) {
bos.write(b);
}
//拷贝
bis.close();//关闭输入流
bos.close();//关闭输出流
}
}
f.delete();//删除源文件
//---------------------------------------------------------------------------------------------------------------------
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2