本帖最后由 杨世平 于 2013-1-25 10:57 编辑
代码写错了,建议封装下吧,我测试了了下代码发现了问题..
在for循环下 if(f.isFile()){}这个后面,还有你这句其实不用加的,你前面的File[] files = srcFile.listFiles();取的已经是文件夹下的所有文档了....你还继续判断是不是文档?
if (f.exists()) {
System.out.println(f.getAbsoluteFile());
if (!f.delete()) {
System.out.println("请关闭使用该文件的所有进程或者流!!");
} else {
System.out.println(f.getName()+" 成功被删除!");
}
}
在这里输出的语句时
d:\java\ProductDAO.jad
ProductDAO.jad 成功被删除!
d:\java\ProductDAO.java
请关闭使用该文件的所有进程或者流!!
这说明你的f值在变,先变成.jad......
你现在的代码不好修改,我建议你封装下,写个类,3个方法,复制,改成.jad,还有个删除文件的方法..这样就不会出现关闭流的问题
刚刚才想到问题所在,你分别应了输入和输出流2次所以你要关闭2次....你应该在复制的关闭一次,变成.jad时关闭一次..原因就是你的流没关干净..如果你不想封装的话代码如下
package dao;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.registry.DeleteException;
/*9、 编写一个程序,将d:\java 目录下的所有.java 文件
* 复制到d:\jad 目录下,
* 并将原来文件的扩展名从.java 改为.jad。
*/
public class Test9 {
public static void main(String[] args) throws Exception {
//指定目标文件
File srcFile=new File("d:\\java");
//指定目的路径
File destFile = new File("d:\\jad");
File[] files = srcFile.listFiles();
for(File f:files){
//System.out.println(f);
String name = f.getName();
if(name.endsWith(".java")){
//创建输入流。并关联目标文件
FileInputStream fis = new FileInputStream(f);
//创建输出流,关联输出目录
FileOutputStream fos = new FileOutputStream(new File(destFile,name));
//调用缓冲数组,为了提高效率,使用1024*1024的数组
byte[] byt=new byte[1024*1024];
//定义一个变量接受数组数据
int len=0;
while((len=fis.read(byt))!=-1){
fos.write(byt, 0, len);
}
//关闭流! 在这里再加次关闭流就好了
fis.close();
fos.close();
//抽取文件名后缀名的角标
int lastIndexOf = name.lastIndexOf(".java");
//抽取文件名中非后缀名的子字符串
String substring = name.substring(0, lastIndexOf);
//将子字符串和.jad组合成新文件名
String newname = substring.concat(".jad");
//以新文件名在源目录创建新空白文件
File file2 = new File(srcFile,newname);
fis=new FileInputStream(f);
fos=new FileOutputStream(file2);
while((len=fis.read(byt))!=-1){
fos.write(byt, 0, len);
}
//关闭流!
fis.close();
fos.close();
}
//删除源目录里的java文件
if (f.exists()) {
System.out.println(f.getAbsoluteFile());
if (!f.delete()) {
System.out.println("请关闭使用该文件的所有进程或者流!!");
} else {
System.out.println(f.getName()+" 成功被删除!");
}
}
}
}
}
|