日期:2014-05-20  浏览次数:20964 次

java修改文件名,请帮忙找其中的错误~~~~~~~~~~
我可以列出目录下所有文件的文件名,就是没办法改,请帮帮我把~~~
import   java.io.*;  
import   java.io.*;  
public   class   FileRename
{  
private   File   dir;  
private   String   absolute;  
public   FileRename(File   dir)   throws   Exception  
{  
if(dir.isDirectory())           //判断是否是个目录,是目录返回true
{  
this.dir   =   dir;                           //将目录赋值给变量
absolute=dir.getAbsolutePath();           //绝对路径名字符串存放到变量  
}  
else  
{  
throw   new   Exception( "err   dir ");                   //不是目录就抛出异常
}  
}  
public   void   Rename(String   filename,int   increment)  
{  
int   i   =   0   ;  
String   temp[]   =   dir.list();       //将路径字符串化存放到字符串数组中

for(String   s   :   temp)                 //这个是啥意思??不懂可以解释下吗??
{  
File   f   =   new   File(absolute+File.pathSeparator+ "s ");                   //这个 "s "有什么作用??
System.out.println(f.isFile());
if(f.isFile())                     //错误主要是这个每次都返回false
{  
f.renameTo(new   File(absolute+File.pathSeparator+filename+String.valueOf(i)));   // "; "对目录有什么作用??
i   =   i+   increment;  
}  
}  
}
public   static   void   main(String   args[])   throws   Exception  
{  
        File   f1=new   File( "E:\\java\\JavaApplication8\\jpg ");
        FileRename   fr   =   new   FileRename(f1);  
        fr.Rename( "debug.exe ",1);  
}
}


------解决方案--------------------
for(String s : temp)
// 这个是5.0中新增加的for in循环,temp是一个数组或List,String s是temp数组存放的数据类型,这个for的作用就和
for(int i=0; i <temp.length; i++) {
  String s = temp[i];
}
的作用一致。

File f = new File(absolute+File.pathSeparator+ "s ");
// 把 s 的两个引号去掉,这里的 s 就是在上面 for 循环中的文件名。

不过我发现这样改文件的方法,好像连文件后缀都没有了。
------解决方案--------------------
你的错误主要有2点:
第一点:你自己也看到了,你不明白那个 "s "是什么,其实那个s是一个字符串变量,代表了文件名,不应该加引号的,把引号去掉就对了。
第二点:你用到了File.pathSeparator,很遗憾,这东西不是文件分隔符,他在windows系统中代表了 '; '这一字符,因此下面的判断总是false。正确的用法是File.separator,这个在windows中才是 '\\ '。

修正这2点后,程序就能够正常运行了。