Java 无法删除和重命名文件
我有以下情况:Java 无法删除和重命名文件,java,file,delete-file,Java,File,Delete File,我有以下情况: 程序可以找到文件并读取第一行(-120)(来自arenas_be1.txt) 程序可以将1添加到-120并将其写入f1.txt 然后不会发生任何事情,一秒钟后将使用相同的数字(-120)和(-120+1)调用该方法 我认为问题是主文件无法删除,但为什么 public void defaultGameStart() { this.getServer().getScheduler() .scheduleSyncRepeatingTask(this,
public void defaultGameStart() {
this.getServer().getScheduler()
.scheduleSyncRepeatingTask(this, new Runnable() {
public void run() {
setCountdownLess();
}
}, 20, 20);
}
public void setCountdownLess() {
File zuÄnderndeDatei = new File("plugins/DB/join_signs.txt");
try {
BufferedReader reader = new BufferedReader(new FileReader(
zuÄnderndeDatei));
String line;
while ((line = reader.readLine()) != null) {
String[] spLine = line.split(";");
if (spLine[2].startsWith("BE")) {
File zuÄnderndeDatei11 = new File("plugins/DB/arenas/arenas_"+spLine[2].toLowerCase()+".txt");
File buffer = new File("plugins/DB/arenas/f1.txt");
try {
BufferedReader reader1 = new BufferedReader(new FileReader(
zuÄnderndeDatei11));
BufferedWriter writer = new BufferedWriter(new FileWriter(buffer));
String line1;
System.out.println("-> "+spLine[2]);
line1 = reader1.readLine();
System.out.println("-> "+line1);
writer.write((Integer.parseInt(line1) + 1)+"");
writer.write(System.getProperty("line.separator"));
countDownToStart((Integer.parseInt(line1) + 1),
spLine[2]);
System.out.println("-> "+(Integer.parseInt(line1) + 1));
reader1.close();
writer.flush();
writer.close();
zuÄnderndeDatei11.setWritable(true);
if (zuÄnderndeDatei11.delete()) {
buffer.renameTo(zuÄnderndeDatei11);
}
} catch (Exception e) {
System.out
.println("Fehler beim Anpassen der Template-Datei<>setcountdownless");
e.printStackTrace();
}
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void defaultGameStart(){
此文件名为.getServer().getScheduler()
.scheduleSyncRepeatingTask(这是新的Runnable(){
公开募捐{
setCountdownLess();
}
}, 20, 20);
}
public void setCountdownLess(){
File zuÄnderndeDatei=新文件(“plugins/DB/join_signs.txt”);
试一试{
BufferedReader reader=新BufferedReader(新文件读取器(
祖恩德代蒂);
弦线;
而((line=reader.readLine())!=null){
String[]样条曲线=line.split(“;”);
if(样条曲线[2]。起始于(“BE”)){
File zuÄnderndeDatei11=新文件(“plugins/DB/arenas/arenas⑾”+spLine[2].toLowerCase()+”.txt”);
文件缓冲区=新文件(“plugins/DB/arenas/f1.txt”);
试一试{
BufferedReader reader1=新的BufferedReader(新文件读取器(
zuÄnderndeDatei11);
BufferedWriter writer=新的BufferedWriter(新文件写入程序(缓冲区));
字符串行1;
System.out.println(“->”+样条[2]);
line1=reader1.readLine();
System.out.println(“->”+第1行);
writer.write((Integer.parseInt(line1)+1)+“”);
writer.write(System.getProperty(“line.separator”);
倒计时开始((整数.parseInt(第1行)+1),
样条[2]);
System.out.println(“->”+(Integer.parseInt(line1)+1));
reader1.close();
writer.flush();
writer.close();
zuÄnderendedatei11.可设置写(true);
if(zuÄnderendedatei11.delete()){
缓冲区.重命名(zuÄnderendedate11);
}
}捕获(例外e){
系统输出
.println(“Fehler beim Anpassen der Template Dateisetcountdownless”);
e、 printStackTrace();
}
}
}
reader.close();
}捕获(例外e){
e、 printStackTrace();
}
}
顺便说一下,这是一个Bukkit插件
if (zuÄnderndeDatei11.delete()) {
buffer.renameTo(zuÄnderndeDatei11);
}
正在返回false
因为您在尝试删除之前没有关闭读卡器。如果在您尝试删除文件之前未关闭读卡器,系统将不会删除它,因为它认为用户仍然打开了文件(您这样做,但通过java)。您需要关闭读卡器,然后尝试删除它
编辑:以及为什么要通过文件创建倒计时?这太没效率了,我都快哭了。使用以下命令:
final int time = 90;
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
@Override
public void run()
{
if(time > 0)
time--;
else
{
timer.cancel();
//do something
}
}
},1000,1000);
我不能复制它,但我认为你不能删除它,因为它正被阅读器使用,你在尝试删除它后关闭它。首先尝试删除umlauts。仔细检查你的文件,永不伤害…仅供参考,你不需要调用writer.flush();和writer.close();Flush执行close所做的操作,而不会释放缓冲区并使其无法使用。因此,根据你的目标,给其中一个打电话。