java - 文件无法删除和重命名

标签 java file delete-file

我有以下情况:

  1. 程序可以找到该文件并可以读取第一行 (-120)(来自 arenas_be1.txt)
  2. 程序可以将-120加1并写入f1.txt
  3. 然后什么也没有发生,一秒后将使用相同的数字 (-120) 和 (-120+1) 调用该方法

我认为问题是主文件无法删除,但为什么呢?

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();
    }
}

顺便说一下,这是一个 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);

关于java - 文件无法删除和重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20862869/

相关文章:

Java 一行变量声明?

java - TreeSet 上的迭代器导致无限循环

java - 如何使用 ProcessBuilder 将值从 Python 脚本返回到 Java?

java - 使用java下载远程机器文件

java - 如何通过选项卡浏览组件?

c++ - 使用 getline 和 stringstream 检查句子中的单词是否在文件中

ruby - 在ruby中的特定行之后删除文件的内容

java - 使用 .jar 删除文件

c# - 删除目录中除 C# 中的文件之外的所有内容

ios - 从表中删除并删除文件