急!!!为什么java重命名不成功?

sAS112UUUYY111 2010-04-01 10:47:11
我写了个程序,最后一个功能是要实现重命名功能。
File file=new File("F:/data/b.txt");
File file2=new File("F:/data/a.txt");
boolean b=file.renameTo(file2);
System.out.println("boolean:"+b);
打印结果是false
为什么无法重命名呢?
...全文
1040 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
iefus 2010-04-01
  • 打赏
  • 举报
回复
查看了下api,试了下,File dest中参数:
dest - 指定文件的新抽象路径名
你这句:file.renameTo(file2);是要把b.txt重新保存为a.txt。但是同一个文件夹中a文件已经存在,所以失败了,可以删掉a试试,就成功了


renameTo
public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
此方法行为的许多方面都是与平台有关的:重命名操作无法将一个文件从一个文件系统移动到另一个文件系统,该操作不是不可分的,如果已经存在具有目标抽象路径名的文件,那么该操作可能无法获得成功。应该始终检查返回值,以确保重命名操作成功。


参数:
dest - 指定文件的新抽象路径名
返回:
当且仅当重命名成功时,返回 true;否则返回 false
sAS112UUUYY111 2010-04-01
  • 打赏
  • 举报
回复
有谁知道什么原因呢?我把io关闭了,也不行
iefus 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 sas112uuuyy111 的回复:]
我在程序的前部分往硬盘写n个不同的文件,然后在后面将其中的某些文件重命名时,无法完成,
当我在最后关闭了输出流时,重命名失败。
但是我在程序中加了几句代码,每当写完一个文件时,就关闭输出流,
最后,重命名成功了。

在写每个文件是我都创建一个输出流,它们是同名的。
为什么必须在每次写完一个文件后,关闭输出流,而不是在最后关闭一次即可?
[/Quote]

源代码贴出来看看
sAS112UUUYY111 2010-04-01
  • 打赏
  • 举报
回复
如果单独写这段程序能够修改,但是我前面写了生成文件的程序,现在改文件名,无法成功
sAS112UUUYY111 2010-04-01
  • 打赏
  • 举报
回复
是true
xiesisi3 2010-04-01
  • 打赏
  • 举报
回复
你先调用f.exists()看下返回值先……
ladybirds2008 2010-04-01
  • 打赏
  • 举报
回复
帮你顶着 给点辛苦分啊。。。
sAS112UUUYY111 2010-04-01
  • 打赏
  • 举报
回复
而且
file.delete()也是false?
向各位请教了。
sAS112UUUYY111 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 chdw 的回复:]
可能是file2已经存在,所以不能renameTo,也可以是因为file2被你程序或者其它程序打开了
[/Quote]
file2原来不存在的
ChDw 2010-04-01
  • 打赏
  • 举报
回复
可能是file2已经存在,所以不能renameTo,也可以是因为file2被你程序或者其它程序打开了
sAS112UUUYY111 2010-04-01
  • 打赏
  • 举报
回复
我在程序的前部分往硬盘写n个不同的文件,然后在后面将其中的某些文件重命名时,无法完成,
当我在最后关闭了输出流时,重命名失败。
但是我在程序中加了几句代码,每当写完一个文件时,就关闭输出流,
最后,重命名成功了。

在写每个文件是我都创建一个输出流,它们是同名的。
为什么必须在每次写完一个文件后,关闭输出流,而不是在最后关闭一次即可?
pengzhistar 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 suixinsuoyu12519 的回复:]
引用 11 楼 pengzhistar 的回复:
renameTo(File dest) 重新命名此抽象路径名表示的文件。 注意抽象这两个字


Java code

File f1 = new File("c:/error.txt");
File f2 = new File("c:/error1.txt");
if(f2.exists()){
f2.delete();
……
……
[/Quote]

呵呵 我对文件进行了读写测试发现也可以重命名额!
  • 打赏
  • 举报
回复
xp系统下你是无法把两个相同文件名的文件放一起的。你的重命名同理。
李晚晚 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 pengzhistar 的回复:]
renameTo(File dest) 重新命名此抽象路径名表示的文件。 注意抽象这两个字


Java code

File f1 = new File("c:/error.txt");
File f2 = new File("c:/error1.txt");
if(f2.exists()){
f2.delete();
……
[/Quote]

你这个只是单纯的为文件重命名,没进行其他的操作,现在的问题是,进行了其他的读写流之类的操作,然后重命名操作失败了!只是单纯的重命名,大家都能成功的!!
李晚晚 2010-04-01
  • 打赏
  • 举报
回复
我也遇到了和LZ相同的问题,也是无法重命名,但是可以先重命名,然后再执行其他操作!如果先执行其他的操作,比如读这个文件,然后再修改这个文件名字,就无法重命名了,我先把代码贴出来了,大家帮忙了啊!!

File file = new File(fileName);
File newFile = new File(fileName.replace("2008", "2011"));

BufferedReader bReader = new BufferedReader(new FileReader(file));
PrintWriter pWriter = new PrintWriter(newFile.getPath());
String linesString = "";
if (!file.exists()) {
throw new RuntimeException("文件不存在");
}else{
while((linesString = bReader.readLine())!=null){
System.out.println(linesString.replace("2008-", "2009-"));
}
bReader.close();
pWriter.close();
}
if(file.renameTo(newFile)){
System.out.println("Rename file succeed");
}else {
System.out.println("Rename file failed");
}

}


pengzhistar 2010-04-01
  • 打赏
  • 举报
回复
我的打印结果为 :
false
true
pengzhistar 2010-04-01
  • 打赏
  • 举报
回复
renameTo(File dest) 重新命名此抽象路径名表示的文件。 注意抽象这两个字


File f1 = new File("c:/error.txt");
File f2 = new File("c:/error1.txt");
if(f2.exists()){
f2.delete();
}
System.out.println(f2.exists());
boolean b = f1.renameTo(f2);
System.out.println(b);
李晚晚 2010-04-01
  • 打赏
  • 举报
回复
你的data文件夹底下是不是已经存在了a.txt文件啊,要不把代码都贴上来吧,我也遇到过类似的问题!!
那次好像是io流没关闭!!你这次也可能其他地方有问题!!
sAS112UUUYY111 2010-04-01
  • 打赏
  • 举报
回复
有人知道吗?谢谢了
sAS112UUUYY111 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 iefus 的回复:]
查看了下api,试了下,File dest中参数:
dest - 指定文件的新抽象路径名
你这句:file.renameTo(file2);是要把b.txt重新保存为a.txt。但是同一个文件夹中a文件已经存在,所以失败了,可以删掉a试试,就成功了


Java code

renameTo
public boolean renameTo(File dest)重新命名此抽象路径名……
[/Quote]



如果删除了,怎么重命名呢?

62,633

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧