今天在用Java进行文件名互换时遇到了一个问题, 改名失败, 经分析修改后终于解决, 特此记录.
改名思路:
/**
* 1.将源文件名改为和新文件不冲突的名称.
* 2.将新文件改为之前的源文件名.
* 3.将改名后的源文件名改为新文件名.
*/
/**
* [声音防爆点击事件]
* @author 光影九曜 QQ:150032099
* @return: void 返回类型
* @param e [事件对象]
* @date: 2019年6月25日 下午3:09:03
*/
@FXML
public void voiceSwitchAction(ActionEvent e) {
File newFlie = new File("Sound.wz1");
if (!newFlie.exists()) {
Utils.showMessageDialog("Sound.wz1不存在");
return;
}
File orgFlie = new File("Sound.wz");
/**
* 1.将源文件名改为和防爆文件不冲突的名称.
* 2.将防爆文件改为源文件名.
* 3.将改名后的源文件名改为防爆文件名.
*/
boolean isRenamed = orgFlie.renameTo(new File("Sound.wz2"));
if (!isRenamed) {
Utils.showMessageDialog(orgFlie.getName() + "无法改名, 可能是游戏启动或者该文件被其他程序占用.");
return;
}
isRenamed = newFlie.renameTo(new File("Sound.wz"));
if (!isRenamed) {
Utils.showMessageDialog(newFlie.getName() + "无法改名, 可能是游戏启动或者该文件被其他程序占用.");
return;
}
isRenamed = orgFlie.renameTo(new File("Sound.wz1"));
if (!isRenamed) {
Utils.showMessageDialog(orgFlie.getName() + "无法改名, 可能是游戏启动或者该文件被其他程序占用.");
return;
}
}
这段代码只有第一次改名成功, 后面的全都没有改名, 但是返回的却是true, 后来经过多方面的分析, 觉得可能是因为改名之后需要重新创建对象才能再次改名成功, 尝试了一下果然是这样.下面贴出代码:
/**
* [声音防爆点击事件]
* @author 光影九曜 QQ:150032099
* @return: void 返回类型
* @param e [事件对象]
* @date: 2019年6月25日 下午3:09:03
*/
@FXML
public void voiceSwitchAction(ActionEvent e) {
File newFlie = new File("Sound.wz1");
if (!newFlie.exists()) {
Utils.showMessageDialog("Sound.wz1不存在");
return;
}
File orgFlie = new File("Sound.wz");
/**
* 1.将源文件名改为和防爆文件不冲突的名称.
* 2.将防爆文件改为源文件名.
* 3.将改名后的源文件名改为防爆文件名.
*/
boolean isRenamed = new File("Sound.wz").renameTo(new File("Sound.wz2"));
if (!isRenamed) {
Utils.showMessageDialog(orgFlie.getName() + "无法改名, 可能是游戏启动或者该文件被其他程序占用.");
return;
}
isRenamed = new File("Sound.wz1").renameTo(new File("Sound.wz"));
if (!isRenamed) {
Utils.showMessageDialog(newFlie.getName() + "无法改名, 可能是游戏启动或者该文件被其他程序占用.");
return;
}
isRenamed = new File("Sound.wz2").renameTo(new File("Sound.wz1"));
if (!isRenamed) {
Utils.showMessageDialog(orgFlie.getName() + "无法改名, 可能是游戏启动或者该文件被其他程序占用.");
return;
}
}