广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java.io.File的renameTo方法移动文件失败的解决方案
  • 561
分享到

java.io.File的renameTo方法移动文件失败的解决方案

2024-04-02 19:04:59 561人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

今天线上发现一个问题,发现一个定时移动文件的业务没有正常执行,结合日志和代码发现,移动文件是使用File类的renameTo方法,但是方法返回的都是false,表示文件移动失败。 出

今天线上发现一个问题,发现一个定时移动文件的业务没有正常执行,结合日志和代码发现,移动文件是使用File类的renameTo方法,但是方法返回的都是false,表示文件移动失败。

出现这个问题我第一反应是不是文件权限的问题,但是和运维研究后发现的确不是权限导致的。既然不是权限的问题,那就看看renameTo的实现吧,查看源码发现该方法最终是通过一个本地方法实现的,看不到咋写的。

网上查了一下renameTo这个方法,发现这个方法确实存在一些问题,就是在不同的文件系统中移动是不会成功的。因为测试环境并未出现这个问题,我就把生产环境和测试环境对比了下,发现测试环境下,文件本身的目录和要移动到的目录是在/home下,而生产环境中,文件本身目录是在/home下,要移动到的目录都是在/data下。于是用df命令查看了一下,发现 /home的文件系统是/dev/sda3,类型是xfs的,/data的文件系统是/dev/sdb1,类型是ext4。

既然是这样那就写个demo在自己的虚拟机上验证一下是不是这个原因导致的。

1.首先找两个文件系统不一样的目录,命令df -T

我们用/tmp 和 /run 作为测试目录。

2.测试代码


import java.io.File;

public class FileTest {
  public static void main(String[] args) {
     String filePath="/tmp/test.txt";
     File file = new File(filePath);
     boolean b = file.renameTo(new File("/run/test.txt"));
     System.out.println(b);
 }
}

3.编译运行


javac FileTest.java
java FileTest

运行结果输出false,文件也确实未移动成功

解决方法:

使用apache的commons-io包中的工具类的进行文件移动。

1.测试代码:


import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;

public class FileTest {
  public static void main(String[] args) {
     String filePath="/tmp/test.txt";
     File file = new File(filePath);
     boolean b = file.renameTo(new File("/run/test.txt"));
     System.out.println(b);
     //使用apache的FileUtils工具
     try {
         FileUtils.moveFile(file,new File("/run/test.txt"));
         System.out.println("success");
     } catch (IOException e) {
         e.printStackTrace();
     }
 }
}

2.编译运行


javac -cp /root/jar/commons-io-2.4.jar FileTest.java
java -cp /root/jar/commons-io-2.4.jar: FileTest

运行结果成功移动文件

3.apache的FileUtils移动文件方法的主要实现如下:


//先使用renameTo方法进行移动
boolean rename = srcFile.renameTo(destFile);
if (!rename) {
 //renameTo移动失败,就复制文件,然后删除原文件
 copyFile( srcFile, destFile );
 if (!srcFile.delete()) {
 FileUtils.deleteQuietly(destFile);
 throw new IOException("Failed to delete original file '" + srcFile +
  "' after copy to '" + destFile + "'");
 }
}

总结

1、文件移动最好不要使用Java的renameTo方法,而是应该使用apache的commons-io包,当然也可以自己封装类似的方法。

2、renameTo方法移动失败是文件系统不同造成的,补充测试发现不同的文件系统,就算类型相同,移动也会失败。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java.io.File的renameTo方法移动文件失败的解决方案

本文链接: https://www.lsjlt.com/news/129983.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java.io.File的renameTo方法移动文件失败的解决方案
    今天线上发现一个问题,发现一个定时移动文件的业务没有正常执行,结合日志和代码发现,移动文件是使用File类的renameTo方法,但是方法返回的都是false,表示文件移动失败。 出...
    99+
    2022-11-12
  • 如何解决java.io.File的renameTo方法移动文件失败的问题
    本篇内容主要讲解“如何解决java.io.File的renameTo方法移动文件失败的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决java.io.File的renameTo方法移动...
    99+
    2023-06-20
  • springboot创建文件夹失败的解决方法
    本篇文章给大家分享的是有关springboot创建文件夹失败的解决方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。springboot创建文件夹失败今天用idea写sprin...
    99+
    2023-06-29
  • springBoot整合Eureka启动失败的解决方案
    其实springBoot 整合Eureka 是比较简单 ,可是我发现很多人整合后会启动不了,我这里列出比较常见的报错的原因 报:A child container failed d...
    99+
    2022-11-12
  • CentOS7.5启动sqlplus失败的解决方法
    本篇内容介绍了“CentOS7.5启动sqlplus失败的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2022-10-18
  • 启动mysql server失败的解决方法
    这篇文章主要讲解了“启动mysql server失败的解决方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“启动mysql server失败的解决方法”吧!...
    99+
    2022-10-18
  • SpringBoot启动失败的解决方法:Acomponentrequiredabeanoftype‘xxxxxxx‘thatcouldnotbefound.
    目录问题描述分析问题解决问题不注入bean的方式使用@Component扩展:@Component解释说明问题描述 今天写了一个MD5加密加盐工具类,运用到实际业务代码中缺报错了,内...
    99+
    2023-02-14
    SpringBoot启动失败
  • Windows中Mysql启动失败的完美解决方案
    目录一、问题描述1.1、mysql服务启动失败11.2、mysql服务启动失败2二、针对一的解决办法2.1、问题解析2.2、解决办法2.2.1、存在数据的情况三、数据恢复3.1、mysql数据恢复【Mysql问题】Win...
    99+
    2022-10-17
  • Zblog中ZTI文件上传失败解决方法
    关键字描述:解决 方法 失败 上传 文件 主题   ZTI 情况 格式 最近很多网友前来询问,为什么zblog主题zti格式的主题包上传不了或者上传直接失败啊,现在ZBLOG模板中心来为您解开疑虑。zblog ...
    99+
    2022-06-12
    解决 方法 失败 上传 文件 主题 情况 ZTI 格式 zblog
  • Spring自动注入失败的解决方法
    目录Spring自动注入失败如何解决?回答注入你的bean使用@Configurable手动查找bean:不推荐Spring自动注入失败如何解决? 我有一个被Spring @Ser...
    99+
    2022-11-12
  • WebLogic8的domain启动失败的解决方案是怎样的
    这期内容当中小编将会给大家带来有关WebLogic8的domain启动失败的解决方案是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。weblogic的一个domain启动失败,在日志中有如下信息提示...
    99+
    2023-06-03
  • php session_start 失败的解决方法
    本篇内容介绍了“php session_start 失败的解决方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php session_st...
    99+
    2023-06-20
  • mysql start失败的解决方法
    这篇文章主要为大家展示了“mysql start失败的解决方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql start失败的解决方法”这篇文章吧。 ...
    99+
    2022-10-19
  • springboot打成jar后获取classpath下文件失败的解决方案
    springboot打成jar后获取classpath下文件 代码如下: ClassPathResource resource = new ClassPathResource("...
    99+
    2022-11-12
  • nginx.pid打开失败以及失效的解决方案
    目录一、问题描述二、问题出现分析三、解决方案方案1:创建目录方案2:重新指定一个配置文件方案3:修改默认的pid一、问题描述 在我们平常使用nginx的时候,经常有可能会发现我们的p...
    99+
    2022-11-12
  • Windows更新失败的解决方法
    这篇文章主要介绍Windows更新失败的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Windows更新失败的解决方法一:重启电脑,按F8进入高级开机选项,选择回车“最近一次的正确配置(高级)”,如图所示:W...
    99+
    2023-06-28
  • KB4012213安装失败的解决方法
    这篇文章主要介绍了KB4012213安装失败的解决方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。KB4012213其实是微软官方系统安全补丁,可以让你的win8系统免受勒...
    99+
    2023-06-13
  • Android Beam 文件传输失败分析与解决方法
    最近在修改Android7.0原生平台的一些bug,其中有关Android Beam传输文件的一些问题还是蛮多的。所以特地找时间总结下曾经踏过的坑。1.传输的文件名包含中文时,导致传输失败可能是由于Google未考虑到本地化差异,导致在传输...
    99+
    2023-05-30
    android beam 文件传输
  • win11驱动更新安装失败解决的方法
    这篇文章主要介绍“win11驱动更新安装失败解决的方法”,在日常操作中,相信很多人在win11驱动更新安装失败解决的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”win11驱动更新安装失败解决的方法”的疑...
    99+
    2023-06-30
  • 在zuulFilter中注入bean失败的解决方案
    zuulFilter注入bean失败 一、为什么要用到这个 上周想实现在网关层 zuul 实现用户认证操作,即需要在网关过滤器中调用其他的微服务,按常规做法在 filter 中用 @...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作