首页 > 系统相关 >Java处理Linux软连接文件

Java处理Linux软连接文件

时间:2022-09-20 17:34:13浏览次数:88  
标签:文件 Java attrs file Linux Path 连接 dir

这是几年前写的旧文,此前发布Wordpress小站上,现在又重新整理。算是温故知新,后续会继续整理。如有错误望及时指出,在此感谢。

背景:

运维同学反馈有一个部署很久的线上业务组件有大量的异常日志,拿到程序日志后,经排查,原因让人蛋疼。

原因运维对这个组件所部署的节点的磁盘进行了扩充,为了不影响线上部署的程序运行,创建一个软连接至新磁盘上,正常情况下该操作也无可厚非。蛋疼就在这里,该组件需要定时遍历文件目录,就在这个软连接上吃了瘪。

问题原因知道了,该怎么解决呢。

    Path path = Paths.get("/usr/local/java");//软连接,实际指向-> /usr/local/jdk1.8.0_202
    
    Files.walkFileTree(path.**toRealPath**(), new SimpleFileVisitor<Path>() {
        @Override
        public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
            log.info("preVisitDirectory dir:{}", dir.toAbsolutePath());
            return super.preVisitDirectory(dir, attrs);
        }
    
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            log.info("visitFile file:{},RealPath:{}", file, file.toRealPath());
    
            return super.visitFile(file, attrs);
        }
    
    });
    ```

之前的代码,直接使用了path对象,这就是问题所在。

因为使用的是Path对象来进行遍历的,那么**toRealPath**方法会返回该软连接的实际路径。

*根因是在Linux系统中,所有交互资源都用文件描述符来表示,而软连接是一种文件,目录也是一种文件。*

所以造成了Files.walkFileTree遍历时,发现软连接不是目录文件的,当作普通文件来处理。

标签:文件,Java,attrs,file,Linux,Path,连接,dir
From: https://www.cnblogs.com/panshan-lurenjia/p/16711832.html

相关文章

  • 前端面试题JavaScript篇——2022-09-20
    每日3题1以下代码执行后,控制台中的输出内容为?//index.jsconsole.log(1);import{sum}from"./sum.js";console.log(sum(1,2));//sum.jsconsole.log(2);exp......
  • 工程课Linux第一节笔记
    上课笔记文件系统结构/根目录/bin/存放系统命令,普通用户与root都可以执行/etc/配置文件保存位置/lib/系统调用的函数库保存位置/var/目录用于存储动态数据,例......
  • Linux目录操作cp、mv与rmLinux查找文件(find、which)
    cp(复制)cp(copy)备份cp[选项]…源文件目标相当改名复制文件夹文件相当于改名字另存为cp[选项]...源文件...文件夹多个源文件只能复制到文件夹 选项: ......
  • 安装UrBackup Linux客户端
    记录下要备份的客户端的IP和用户名;到UrBackup服务端去手动添加Linux客户端;复制服务端生成的密匙文件到TXT文件,方便接下来在客户端上使用;按第3点生成的TXT文件来在客户端上......
  • 在linux安装pm2
    1.安装:npminstallpm2-g安装完成之后要创建软链接(我自己测试安装时,发现没有创建软链接也是能用的,即下面2、3步不需要)。2.用find命令查找pm2安装目录:find/-namepm2......
  • Java线程的join方法
    java线程中的join方法线程的join方法可以用来让本线程插队,强行占用cpu执行权;现有线程A在cpu上运行,另一个线程B调用自己的join方法,强行把正在运行的线程A退回到等待状态,......
  • Java基础之ClassFile文件结构
    本文相关知识均来自:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html.class文件都遵循ClassFile结构:ClassFile{u4magic;u2......
  • 【Java基础】System.out.println() 解析
    1.代码说明System类提供一些有用的属性和方法,包括标准输入输出和错误打印。有一个对象属性out,类型为PrintStream。setOut()方法使用static修饰,类加载时执行。该对象属......
  • java通过Throwable的printStackTrace方法将异常信息保存到字符串中
    java通过Throwable的printStackTrace方法将异常信息保存到字符串中   /***将异常信息转化成字符串*@paramt*@return*@throwsIOException*/priv......
  • 开发工具:第四章:Java开发必选工具
      更多内容请见原文,原文转载自:https://blog.csdn.net/weixin_44519496/article/details/120323616......