相信有许多人有做过这个题目:编写一个程序,将d:\java 目录下的所有.java 文件复制到d:\jad 目录下,并将原来文件的扩展名从.java 改为.jad。
以下代码是我做这个题目是写的,正常情况下能够实现题目的要求。但是如果文件名为Test.java.java时,运行这个程序会将文件名改为Test.jad.jad。
我想请问大家是否有办法只改变文件的扩展名,而不会将文件名也改掉?
public class Test9 {
public static void main(String[] args) throws Exception{
File srcDir = new File("d:\\java");
//判断文件夹是否存在
if(!(srcDir.exists() && srcDir.isDirectory())){
throw new Exception("目录不存在");
}
//过滤出以".java"为结尾的文件
File[] files = srcDir.listFiles(new FilenameFilter(){
public boolean accept(File dir,String name){
return name.endsWith(".java");
}
});
File destDir = new File("d:\\jad");
//判断目录是否存在,如果不存在则创建一个
if(!destDir.exists()){
destDir.mkdir();
}
//循环将d:\java 目录下的所有.java 文件复制到d:\jad 目录下
for(File f : files){
FileInputStream fis=new FileInputStream(f);
//将原来文件的扩展名从.java 改为.jad
String destFilename=f.getName().replaceAll(".java", ".jad");
FileOutputStream fos=new FileOutputStream(new File(destDir,destFilename));
//调用复制文件方法
copy(fis,fos);
}
}
public static void copy(InputStream is,OutputStream os){
try{
byte[] buf=new byte[1024];
int len=0;
while((len=is.read(buf))!=-1){
os.write(buf, 0, len);
}
os.flush();//刷新输出流
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{ //关闭所有IO对象流
try{
if(is != null){
is.close();
}
}catch(Exception e){
e.printStackTrace();
}
try{
if(os != null){
os.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
|