易截截图软件、单文件、免安装、纯绿色、仅160KB

请慎用java的File#renameTo(File)方法

以前我一直以为File#renameTo(File)方法与OS下面的 move/mv 命令是相同的,可以达到改名、移动文件的目的。不过后来经常发现问题:File#renameTo(File)方法会返回失败(false),文件没有移动,又查不出原因,再后来干脆弃用该方法,自己实现一个copy方法,问题倒是再也没有出现过。
昨天老板同学又遇到这个问题,File#renameTo(File)方法在windows下面工作的好好的,在linux下偶尔又失灵了。回到家我扫了一遍JDK中File#renameTo(File)方法的源代码,发现它调用的是一个本地的方法(native method),无法再跟踪下去。网上有人说该方法在window下是正常的,在linux下面是不正常的。这个很难说通,SUN不可能搞出这种平台不一致的代码出来啊。
后面在SUN的官方论坛上看到有人提到这个问题“works on windows, don't work on linux”,后面有人回复说是“file systems”不一样。究竟怎么不一样呢?还是没有想出来...
后面在一个论坛里面发现了某人关于这个问题的阐述:
引用
In the Unix'esque O/S's you cannot renameTo() across file systems. This behavior is different than the Unix "mv" command. When crossing file systems mv does a copy and delete which is what you'll have to do if this is the case.
The same thing would happen on Windows if you tried to renameTo a different drive, i.e. C: -> D:
终于明白咯。
做个实验:
Java代码
  
File sourceFile = new File("c:/test.txt");   
File targetFile1 = new File("e:/test.txt");   
File targetFile2 = new File("d:/test.txt");   
System.out.println("source file is exist? " + sourceFile.exists()   
    + ", source file => " + sourceFile);   
System.out.println(targetFile1 + " is exist? " + targetFile1.exists());   
System.out.println("rename to " + targetFile1 + " => "  
    + sourceFile.renameTo(targetFile1));   
System.out.pr


相关文档:

传智播客JAVA培训 Android书籍分享


在这里将我收集的一些书籍,与大家分享
1、介绍Android 与 GPhone的书籍
Introduction To Android
Google官方文档,简要的介绍了Android的各个方面,值得大家看下
GPhone说明书
是每个开发人员必须阅读的,关于GPhone的使用、功能,结合SDK看想必收获会更大
2、经典开发书籍
深入浅出Android–Google手持设备 ......

传智博客JAVA培训——Android将大火


为什么选择Android?
“同大家想象的不同,摩托罗拉选择Android平台的第一原因是先进性,而后才是开放性。”摩托罗拉产品市场部高级经理林金明表示。
他详细解释道,比较摩托罗拉之前采用的所有手机操作系统,Android最为先进,在帮助研发人员应付复杂多变的需求时,其灵活性和延展性表现更加突出。而且Andro ......

用Java测试Windows命令提示符参数格式,及引号的用法

使用下面简单的Java程序测试命令行参数格式。
public class Test {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println(args[i].length() + ":" + args[i]);
}
}
}

编译后打开cmd命令提示符输入如下命令并查看结果:
java Test a aa ......

Java 身份证验证

这是一个没有验证行政区代码的,所以这个不算完全,但是我们在做实际应用时可以加上,这里我没加。
源码如下仅供参考.
package ibees.validator;
import java.util.regex.Pattern;
/**
* 常用的验证,source charset utf-8
*
* @author hhzxj2008
* */
public class CommonValidator {
public static boolea ......

java实现打字机效果的程序

import java.applet.*;
import java.awt.*;
import java.io.*;
import java.net.URL;
import java.util.*;
public class Typewriter4 extends Applet implements Runnable
{
    AudioClip hit, cr, ding ;
    boolean alreadyRun = false,
      & ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号