有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无法删除和重命名java文件

我有以下情况:

  1. 程序可以找到文件并读取第一行(-120)(来自arenas_be1.txt)
  2. 程序可以将1添加到-120并将其写入f1。文本
  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插件


共 (1) 个答案

  1. # 1 楼答案

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