RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 645506
Accepted
RareScrap
RareScrap
Asked:2020-03-29 10:00:23 +0000 UTC2020-03-29 10:00:23 +0000 UTC 2020-03-29 10:00:23 +0000 UTC

Java renameTo - 重命名不起作用

  • 772

下午好。我只是不知道如何在 Java 中重命名文件,因为 我无法跟踪此方法的操作(我使用调试器遍历了 renameTo - 我什至不知道要抓住什么,因为调试器根本无法进一步工作并大喊“找不到本机方法”) .

有趣的是,renameTo 不会在重命名失败时抛出异常,所以我完全解除了武装,不知道该怎么做。我怀疑 Java 无法重命名该文件,因为 FileWriter 没有关闭,没有写入目录的权限,或者文件正在被另一个进程使用。如何检查我的怀疑 - 我不知道,但在代码中我绝对(在我看来)关闭了 FileWriter。而关于权利缺乏的猜测消失了,因为。createNewFile() 创建文件没有任何问题。

怎样成为?希望得到您的帮助并提前致谢:)

编码:

package demon;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.io.File;
import java.io.*;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Демон, который периодически записывает в файл
 * timer.txt системную дату и время и произвольную
 * метаинформацию о системе. Если размер файла
 * превышается 100КБ, то timer.txt переименовывается
 * в timer_<datatime>.txt и создается новый файл timer.txt
 * 
 * @author Valentina
 */
public class Demon {
    private static String fileName = "C:\\Users\\rares\\Downloads\\Demon\\time.txt"; // Путь к текущему файлу
    static DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); // Формат времени
    static Date now = new Date(); 

    /**
     * Точка входа приложения
     * 
     * @param args Массив аргументов
     */
    public static void main(String[] args)  {
        Timer timer = new Timer();

        // Внутренний класс, реализующий запуск и работу демона по таймеру
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                String newfile = "C:\\Users\\rares\\Downloads\\Demon\\timer_"+formatter.format(now.getTime())+".txt";

                File file = new File(fileName);
                File file1 = new File(newfile);

                create(file);     
                long S = length(file);  
                System.out.println(S);
                if (S>20000)  {
                    if (file.renameTo(file1))
                        System.out.print("1");
                    else
                        System.out.print("0");

                    create( new File(fileName));
                }else {
                    update();
                }  
            }   
        };

        timer.schedule(task,10,10);
    } 

    /**
     * Создает новый файл с проверкой на существование
     * @param file Входной объект класса {@link File}, который будет создан
     */
    public static void create(File file){
        if(file.exists())
            System.out.println("Файл существует");
        else
            try {
                file.createNewFile(); 
            } catch (IOException ex) {}
    }

    /**
     * Записывает в файл одну строку, состоящую из времени и имени пользователя
     */
    public static void update() { // TODO: Имхо, это не должно быть статиком.
        File file = new File(fileName);
        FileWriter fr;

        String s = formatter.format(now.getTime());
        System.out.println(s);

        try {
            fr = new FileWriter (file,true);
            s+=System.getProperty("user.name");
            fr.write(s);
            fr.close();
        } catch (IOException e) {
            e.printStackTrace();
            try {
                fr.close();
            } catch (IOException ex) {
                Logger.getLogger(Demon.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /**
     * Метод-обертка, возаращающий размер файла
     * @param file Объект {@link File}, для которого нужно получить размер
     * @return Размер файла в битах
     */
    public static Long length(File file) {     
        return file.length();
    }
}
java
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Александр Мартынцев
    2020-03-29T12:39:45Z2020-03-29T12:39:45Z

    renameTo 是你需要的。但有必要检查源文件及其权限是否存在。最重要的是 - 从操作系统的角度来看,您确定要提供的新文件名是正确的吗???那些。它是否包含无效字符(提示 - 例如冒号)?

    • 2
  2. PhantomStr
    2020-03-29T14:14:15Z2020-03-29T14:14:15Z

    如果您使用的是 java 7 及更高版本,请查看文件库。直接使用文件会变得更容易)https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5