黑马程序员技术交流社区

标题: 自己写的改文件名的小程序有问题 [打印本页]

作者: 王春晓    时间: 2013-5-16 17:06
标题: 自己写的改文件名的小程序有问题
本帖最后由 王春晓 于 2013-5-16 18:36 编辑

自己写了一个可以修改某个文件夹下的指定类型的文件名的小程序,调试打印的结果没问题,但是为什么执行完没有效果呢?
  1. package cr.victor;

  2. import java.io.File;
  3. import java.io.FilenameFilter;

  4. /*
  5. * 需求:将一个文件目录下的文件名进行修改
  6. *
  7. * 步骤:
  8. * 1、将目录对象传入
  9. * 2、判断传入的是否是目录,对该目录进行取出操作,如果其中仍是目录,则递归取出,直到拿到其中的文件名
  10. * 3、根据文件名判断是否是需要修改的类型
  11. * 4、用renameTo方法改名
  12. */

  13. public class RenameFile {
  14.         public static void main(String[] args){
  15.                 File fdir = new File("E:\\learn");
  16.                 dir(fdir);
  17.         }
  18.         
  19.         //传入一个目录,通过递归取出其中的所有文件
  20.         public static void dir(File fdir){
  21.                 if(!fdir.isDirectory() || fdir==null)//判断传入的是否是合法目录
  22.                         throw new RuntimeException("指定目录不存在");
  23.                 else{
  24.                         File[] files = fdir.listFiles();//将目录中的文件或文件夹存入File[]中
  25.                         for(File file : files){
  26.                                 if(file.isDirectory())//如果目录中还是目录,继续递归
  27.                                         dir(file);
  28.                                 else
  29.                                         rename(file);//调用改名方法
  30.                         }
  31.                 }
  32.         }
  33.         
  34.         //改名方法,用renameTo()将一个文件对象改名
  35.         public static void rename(File file){
  36.                 //判断要改名的文件类型
  37.                 if(file.getName().endsWith(".avi")){
  38.                         File fname = new File(file.getParent()+file.getName());//原来的文件路径和文件名
  39.                         File newname = new File(file.getParent()+"\\"+"A"+file.getName());//要更改的路径和文件名
  40.                         fname.renameTo(newname);
  41.                         System.out.println(file.getParent() + "\\" + "A" + file.getName());//调试打印更改后的结果
  42.                 }
  43.         }
  44. }
复制代码

作者: 薛淑凯    时间: 2013-5-16 18:17
本帖最后由 薛淑凯 于 2013-5-16 18:21 编辑

占楼、、、看程序
测试了下这段代码
public static void rename(File file){
        //判断要改名的文件类型
        if(file.getName().endsWith(".avi")){
                File fname = new File(file.getParent()+"\\"+file.getName());//原来的文件路径和文件名  
                File newname = new File(file.getParent()+"\\"+"A"+file.getName());//要更改的路径和文件名
                System.out.println(fname.renameTo(newname));//打印了一下结果发现是false,然后看了看传进去的路径有问题,上边少了\\,然后重命名成功
                System.out.println(file.getParent() + "\\" + "A" + file.getName());//调试打印更改后的结果
        }


作者: 王春晓    时间: 2013-5-16 18:36
薛淑凯 发表于 2013-5-16 18:17
占楼、、、看程序
测试了下这段代码
public static void rename(File file){

啊。。晕死了,只改了下面上面没注意
作者: kaka小明    时间: 2013-5-16 18:45
这位仁兄,通过测试,rename类的newname 和入参file不一样,直接重命名file就OK了,一下是更改后的测试代码:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;


public class BufferedTest {

        /**
         * @param args
         */
       
                 public static void main(String[] args){
             File fdir = new File("D:\\11java");
             dir(fdir);
     }
     
     //传入一个目录,通过迭代取出其中的所有文件
     public static void dir(File fdir){
             if(!fdir.isDirectory() || fdir==null)//判断传入的是否是合法目录
                     throw new RuntimeException("指定目录不存在");
             else{
                     File[] files = fdir.listFiles();//将目录中的文件或文件夹存入File[]中
                     for(File file : files){
                             if(file.isDirectory())//如果目录中还是目录,继续迭代
                                     dir(file);
                             else
                                     rename(file);//调用改名方法
                     }
             }
     }
     
   
       
         //改名方法,用renameTo()将一个文件对象改名
    public static void rename(File file){
            //判断要改名的文件类型
            if(file.getName().endsWith(".java")){
                    File fname = new File(file.getParent()+file.getName());//原来的文件路径和文件名
                    File newname = new File(file.getParent()+"\\"+"A"+file.getName());//要更改的路径和文件名
                   file.renameTo(newname);//直接通过重命名file
                   //if(fname.equals(file))//该条件打印结果也是“文件不同”
                    if(fname==file){//引用地址不一样,也就是操作对象不一样
                            System.out.println("文件相同");
                    }else{
                            System.out.println("文件不同");//打印结果
                    }

                    System.out.println(file.getParent() + "\\" + "A" + file.getName());//调试打印更改后的结果
          //  }
    }
    }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2