问题是这样:我先对一个文件进行写操作代码如下:
BufferedWriter bw=null;
FileWriter fw=null;
try {
for(XtHmd x:lxthmd){
StringBuffer sb=new StringBuffer();
sb.append("11111").append("|")
.append(System.getProperty( "line.separator"));
fw=new FileWriter(f,true);
bw=new BufferedWriter(fw);
bw.write(sb.toString());
bw.flush();

}
} catch (IOException e) {
e.printStackTrace();
log.logError("写文件失败",e);
}finally{
try {
if(null!=bw){

bw.close();
fw.close();
bw=null;
fw=null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
然后对改文件进行改名:
newFile=new File(file.getParent()+File.separator+"allMSG11"+BMD+".txt");
//文件改名
boolean bl=file.renameTo(newFile);
System.out.println(bl);
这里一直返回false;我不写直接改名是可以的希望有人能解决

解决方案 »

  1.   

    You cannot renameTo() across file systems.
    参考
    http://www.cnblogs.com/happy200318/archive/2011/07/11/2102791.html
      

  2.   

    哥给你个实例,你参考:import java.io.File;
    import java.io.IOException;public class Fileremove {
    public static void main(String agrs[]) {
    File f = new File("d:\\test.txt");
    if (f.exists()) {
    f.renameTo(new File("d:\\mmm.txt"));
    } else { try {
    f.createNewFile(); } catch (IOException e) {
    e.printStackTrace();
    } }
    }
    }
      

  3.   

    是有流没有关闭的吧,所以导致文件名修改不成功。
    for(XtHmd x:lxthmd){
    StringBuffer sb=new StringBuffer();
    sb.append("11111").append("|")
    .append(System.getProperty( "line.separator"));
    fw=new FileWriter(f,true);
    bw=new BufferedWriter(fw);
    bw.write(sb.toString());
    bw.flush();}
    是什么情况导致你需要在for循环里面去创建FileWriter和BufferedWirter呢?把这两句放到for循环外面应该就好了。
      

  4.   

    8L说的情况可能性很大,因为你是在循环中打开流的,try...finally是放在循环外的,所以只有最后一个bw被关闭,循环中的其他临时bw没有关闭,也就相当于你的文件还被使用着,当然就不能改名成功了。
    你可以try...finally放在循环外,或者只打开一次bw,每次循环只是追加内容而已try {
    fw=new FileWriter(f,true); //放在循环外,打开一次就可以了
    bw=new BufferedWriter(fw);
    for(XtHmd x:lxthmd){
    StringBuffer sb=new StringBuffer();
    sb.append("11111").append("|")
    .append(System.getProperty( "line.separator"));
    //fw=new FileWriter(f,true);
    //bw=new BufferedWriter(fw);
    bw.write(sb.toString());
    bw.flush();}