Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法删除和重命名文件_Java_File_Delete File - Fatal编程技术网

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,

我有以下情况:

  • 程序可以找到文件并读取第一行(-120)(来自arenas_be1.txt)
  • 程序可以将1添加到-120并将其写入f1.txt
  • 然后不会发生任何事情,一秒钟后将使用相同的数字(-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();
        }
    }
    
    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所做的操作,而不会释放缓冲区并使其无法使用。因此,根据你的目标,给其中一个打电话。