您好,欢迎光临 | 我的主页 | 个人资料 | 短消息 | 好友 | 书签 | 黑名单 |
http://www.javayou.com (添加到收藏夹,设为首页)
当你不能再拥有时,你唯一能做的,就是让自己不要忘记 (手机请访问 http://3g.dlog.cn/javayou)

File.renameTo方法在linux下的问题

2006年6月2日(Friday) 12点04分 作者: 刘冬 天气: 心情: 一般

在Windows操作系统下,File类的renameTo方法可以用来改名或者移动文件,在同一个目录下renameTo方法起的作用是改名,在不同目录下起的作用是移动。

但是这个方法在Linux下工作却不是这样的,在linux系统下renameTo方法只能起到改名作用,而无法移动文件,也就是说当源文件和目标文件不在同一个目录时,该方法无法工作。

因此如果用到该方法时请一定注意这个差异,在linux下移动文件必须自己写代码来实现或者执行操作系统的移动文件的命令。下面给出一段拷贝文件的代码,移动操作可以在拷贝后删除源文件来实现

private void writeTo(File f, File newFile) throws IOException{
  FileInputStream fis = new FileInputStream(f);
  FileOutputStream fos = new FileOutputStream(newFile);
  try{
   byte[] buf = new byte[8192];
   do{
    int rc = fis.read(buf);
    if(rc == -1)
     break;
    fos.write(buf, 0, rc);
    if(rc < buf.length)
     break;
   }while(true);
  }finally{
   fis.close();
   fos.close();
  }
 }

标签: Java Linux 
通过电脑发布 #1楼 评论时间:2006-6-2 12:13 (Friday)
好发现, 时常对于跨平台的IO操作, 让人累得够呛............
邮箱 | 网址 |  
通过电脑发布 #2楼 评论时间:2006-6-2 12:32 (Friday)
是一个解决办法,也可以考虑在java里直接调用linux命令来完成嘛
邮箱 | 网址 |  
通过电脑发布 #3楼 评论时间:2006-6-2 13:23 (Friday)
红卫兵
不好吧,调用系统命令的话就缺乏移植性了。
 
通过电脑发布 #4楼 评论时间:2006-6-3 14:25 (Saturday)
netwjx

提个很白痴的问题哈 为何临时的byte[]长度要8192?(似乎好多用于临时保存数据的都这个长度 仅仅是约定成俗?)

上面的代码如果发生权限问题(比如不可写?) 呵呵 这个仅仅是示例 实际要写的不少

Dlog目前支持代码着色了? 这里也有一个很强的代码着色的在线工具 http://paste.ubuntu.org.cn/

 
通过电脑发布 #5楼 评论时间:2006-6-3 23:12 (Saturday)

这个长度没有规定,8192只能说是一个不大不小的数字,基本上满足大多数情况,又不占用太多内存:)

DLOG4J现在还不能进行代码着色,主要是没有找到简单而且有效的解决办法,谢谢你的提醒。

邮箱 | 网址 |  
通过电脑发布 #6楼 评论时间:2008-4-23 13:15 (Wednesday)
贾跃伟

谁说在linux下不能移动了?

邮箱 |  
姓名: 
邮箱:  {可选}
网址:  {可选} 此评论只有我和写日记的人查阅
校验码: ... <我看不清楚>
网记为您提供手机和互联网同步的个人主页,带给你不一样的体验