File renameTo() 在Linux OS的 bug

阅读更多
    最近,公司的服务器 迁移到 云服务器上,出现了 web应用系统 的tomcat报错日志信息。
参看日志显示  程序指定的目录文件写入失败,进一步参看源代码:

   File.renameTo(File f);


定位到此方法,目标文件未写入成功, 经查是由 File.renameTo 方法 对 Linux系统的 文件存放目标目录格式为 NFS 不支持 导致(原服务器文件格式为 ext3 是可以的,云服务器的目录格式为 NFS,源码、JDK 和其他配置都未变)。

改用: org.apache.commons.io.FileUtils


import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class FileTest {

	
	public  static void main(String[] args) throws IOException{		
		
		File sourceFile = new File("C:/Desktop/timg.jpg");
		File targetFile = new File("D:/.m2/timg1.jpg");
		
		//复制文件
		FileUtils.copyFile(sourceFile, targetFile);
		
		//移动文件到指定目录
		FileUtils.moveFile(sourceFile, targetFile);
		
//		File f = new File("C:/Users/Administrator/Desktop/timg.jpg");
//		f.deleteOnExit();
	}
	
}




所以当遇到 多文件系统 的时候,请尽量避免使用File.renameTo(File)方法,可是使用apache的commons-io包去替换,避免一些潜在BUG。

参考:
https://blog.csdn.net/findmyself_for_world/article/details/41648095

你可能感兴趣的:(java)