public static boolean checkLogFileInfos(String path, String fileName) {
boolean bool = false;
File file = new File(path + fileName);
// 如果打印信息的日志文件的大小大于1024KB
System.out.println(file.length() / 1024);
System.out.println(Long.parseLong(properties
.getProperty("LOG_INFOS_FILE_MAXLENGTH")));
if ((file.length() / 1024) >= Long.parseLong(properties
.getProperty("LOG_INFOS_FILE_MAXLENGTH"))) {
// 重命名本文件为当前日期+fileName
System.out.println(path + newName(fileName));
File newNamed = new File(path + newName(fileName));
file.renameTo(newNamed);
System.out.println(newNamed.getTotalSpace() / 1024);
// 重新建立一个新的日志文件
newFiles(path, fileName);
}
return bool;
}
private static String newName(String fileName) {
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");
String dateStr = format.format(date);
return dateStr + "_" + fileName;
} private static void newFiles(String path, String fileName) {
File file = new File(path + fileName);
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
checkLogFileInfos("C://", "abc.txt");
}
上面代码中不能重命名abc.txt文件,不能新建abc.txt文件,程序没有报错。

解决方案 »

  1.   

     // 重命名本文件为当前日期+fileName
                System.out.println(path + newName(fileName));这句话执行进去了吗?呵呵!
      

  2.   

    后面两个private方法都执行了。
      

  3.   

    createNewFile()返回boolean,估计是false,没成功。
    原因是file已经存在了,要么就file.delete(), file.createNewFile();rename同理看看返回值。要不就写个输入输出流,从新写一个新文件。
      

  4.   

    返回值,这两个方法的结果都为false,看来得另想办法了。转存为临时文件,然后将源文件删除掉,然后新建文件,在将临时文件转移到源文件中。这个过程有点复杂。
      

  5.   

    使用中的文件,是无法做修改的。你说的log,是不是正在被其它进程操作?
      

  6.   

    帮你试过了, File newNamed = new File(path + newName(fileName));
                bool=file.renameTo(newNamed);
    这个newNamed 换一个目录创建就可以了
      

  7.   

    为什么在同一目录中使用renameTo()方法不会成功?
      

  8.   

    修正后的程序如下:import java.io.*;
    import java.io.IOException;
    import java.util.*;
    import java.text.SimpleDateFormat;public class TestRename {
        
    public static boolean checkLogFileInfos(String path, String fileName)  {
        
            boolean bool = false;
            File file = new File(path + fileName);
            // 如果打印信息的日志文件的大小大于1024KB
            System.out.println(file.length() / 1024);
           
            Properties properties = new Properties();
            properties.setProperty("LOG_INFOS_FILE_MAXLENGTH","1");        
            System.out.println(Long.parseLong(properties.getProperty("LOG_INFOS_FILE_MAXLENGTH")));
            
            if ((file.length() / 1024) >= Long.parseLong(properties.getProperty("LOG_INFOS_FILE_MAXLENGTH"))) {
                
                // 重命名本文件为当前日期+fileName           
                /*******************这里的写法有点问题******文件名不能包含下列字符之一,你的日期格式中有冒号*******/
                /*                / \ < > : * ? " |                                      */           
               File newNamed = new File(path + newName(fileName));
                ;file.renameTo(newNamed);
                System.out.println(newNamed.getTotalSpace() / 1024);
    //            
    //            // 重新建立一个新的日志文件
                System.out.println(fileName);
            
                try {
    new File(path + fileName).createNewFile();//这里写法也是有问题的 这里写法也是有问题的 这里写法也是有问题的 
        } catch (IOException e) {
    e.printStackTrace();
        }
            }
            return bool;
        }
        private static String newName(String fileName) {
            Date date = new Date();
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hhmmss");// 把它改过来吧把它改过来吧把它改过来吧把它改过来吧把它改过来吧
            String dateStr = format.format(date);
            return dateStr + "_" + fileName;
        }    public static void main(String[] args) {
            checkLogFileInfos("C:/", "abc.txt");
        }
    }
      

  9.   

    我做过很多实验过后,发现renameTo()方法的新文件名称中不能还有任何符号包括(“ ”,“_”,“:”),只要去掉文件名中的符号就可以了。