下午好。我只是不知道如何在 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();
}
}
renameTo 是你需要的。但有必要检查源文件及其权限是否存在。最重要的是 - 从操作系统的角度来看,您确定要提供的新文件名是正确的吗???那些。它是否包含无效字符(提示 - 例如冒号)?
如果您使用的是 java 7 及更高版本,请查看文件库。直接使用文件会变得更容易)https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html