星期五, 十月 13, 2006

20061013:一个java IO的问题

环境是这样的:
有两台应用服务器,一台文件服务器.业务需求是用户访问应用服务器,提交图片,统一保存到文件服务器.路径保存到数据库.然后客户可以提交查找需求到应用服务器,应用服务器则读取文件服务器的图片,返回到客户.
三台机器都是linux,在同一网段内,并且在文件服务器运行nfs服务端,共享一个目录,两个客户端都挂载该共享目录.

但是,很不幸,有问题:提交文件到共享目录总是失败。但是如果是提交到应用服务器本机则没有问题。
找了很久才发现,原来是File.renameTo()方法的问题。
在Windows操作系统下,File类的renameTo方法可以用来改名或者移动文件,在同一个目录下renameTo方法起的作用是改名,在不同目录下起的作用是移动。
但是这个方法在Linux下工作却不是这样的,在linux系统下renameTo方法只能起到改名作用,而无法移动文件,也就是说当源文件和目标文件不在同一个目录时,该方法无法工作。
因此如果用到该方法时请一定注意这个差异,在linux下移动文件必须自己写代码来实现或者执行操作系统的移动文件的命令。
参考文档:http://www.javayou.com/html/diary/showlog.vm?sid=2&cat_id=-1&log_id=1494

没有评论: