java File renameTo 踩坑---windows vs linux

Java File renameTo 方法 Windows Linux 下的差异:
window :

1 在关闭源文件之前,进行重命名操作,返回 false,重命名失败;

2 目标文件存在时,返回false,重命名失败。

linux:

1 在关闭源文件之前,进行重命名操作,返回 true,重命名成功;

2 目标文件存在时,返回true,覆盖已存在的同名目标文件,重命名成功。

测试demo:(注:使用jdk1.6)

public static void testRename() throws Exception{
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
    String str = sdf.format(new Date());
    String outFileTemp = "testRename" + str + ".txt";
    Writer writer = null;
    try{
        writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFileTemp, false), "GBK"));
        writer.write("789");
        writer.flush();
        /*
         * 1.关闭流前重命名
         */
        File tempFile = new File(outFileTemp);
        System.out.println(tempFile.renameTo(new File("testRename.txt")));
    }catch(Exception e){
        System.out.println("Exception is:" + e.getMessage());
    }finally{
        try{
            if(writer != null){
                writer.close();
            }
        } catch (IOException e) {
            System.out.println("关闭流对象失败:" + e.getMessage());
        }
    }
    /*
     * 2.关闭流后再重命名
     */
//      File tempFile = new File(outFileTemp);
//      System.out.println(tempFile.renameTo(new File("testRename.txt")));
}

你可能感兴趣的:(java File renameTo 踩坑---windows vs linux)