java使用jsch处理软链接判断是否文件夹

这篇具有很好参考价值的文章主要介绍了java使用jsch处理软链接判断是否文件夹。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

这一次主要是碰到一个问题。因为使用jsch去读取文件的时候,有一些文件它是使用软链接制作的一个映射。因为这里面有一个问题。如果它是软链接你就无法判断他到底是文件。还是文件夹?因为他没有提供可以直接读取的方法,用权限信息去判断,文件和文件夹都是l开头,所以这一篇博客的主要目的是介绍如何去处理软链接。判断是实际的文件还是文件夹。

遇到的问题

从Jsch的参数来看,首先这里他提供的一些Is link是为true的。但是判断是文件还是文件夹,全部都会frse,这个就比较苦恼了。一开始我还在想,他会不会没有提供对应的方法?这样我就很难搞了,我还得去找作者去提一手,然后就让他去解决,这时间可就太漫长了。

java使用jsch处理软链接判断是否文件夹,java,jsch,linux

接着这是Linux系统的一个文件目录。可以看到有一些目录,它是做了一个链接映射的。

java使用jsch处理软链接判断是否文件夹,java,jsch,linux

实际测试发现他是软件链接目录isDirisFile方法都是false哦,我明白了在这种情况下,可以尝试使用SftpATTRS对象的getAttrs()方法来获取软链接路径,然后通过readlink()方法来确定实际指向的文件或目录的属性信息,然后判断实际文件或目录的类型。

解决方案

仔细的搜索之下。他可以先去读取这个文件的一个链接,获得实际的路径。有了这个链接的实际路径就好办了,我就可以根据他的实际的路径去判断它到底是文件还是文件夹,虽然复杂繁琐了一点,但是总比没有好吧。总算也算是一个解决方案吧。

示例代码

以下是一个示例代码,演示了如何使用JSch库来获取软链接指向的实际文件或目录的属性信息:

import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;

public class SftpExample {
    public static void main(String[] args) {
        String host = "your_hostname";
        String username = "your_username";
        String password = "your_password";

        try {
            JSch jsch = new JSch();
            Session session = jsch.getSession(username, host, 22);
            session.setPassword(password);
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();

            ChannelSftp channel = (ChannelSftp) session.openChannel("sftp");
            channel.connect();

            SftpATTRS attrs = channel.lstat("/path_to_symbolic_link");

            if (attrs.isLink()) {
                String targetPath = channel.readlink("/path_to_symbolic_link");
                SftpATTRS targetAttrs = channel.lstat(targetPath);

                if (targetAttrs.isDir()) {
                    System.out.println("Symbolic link points to a directory");
                } else {
                    System.out.println("Symbolic link points to a file");
                }
            }

            channel.disconnect();
            session.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们首先通过SftpATTRS对象的isLink()方法判断是否是软链接,然后使用channel.readlink()方法获取软链接指向的实际文件或目录的路径,并通过channel.lstat()方法获取其属性信息,最后判断实际文件或目录的类型。

总结一下

一开始我都打算直接用文件类去读取这个路径,去判断它到底是否方是否是文件或者文件夹。但是这样就会有一个问题。如果我用文件去读取的这个文件跟我这个程序运行的用户相冲突的话,这结果就不太准确,因为如果用程序的用户去读取,可能会存在一个权限问题。但是这个读取链接的方式就完美的解决了这个问题。总算解决了一个痛点。

最后

点赞关注评论一键三连,每周分享技术干货、开源项目、实战经验、国外优质文章翻译等,您的关注将是我的更新动力

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!文章来源地址https://www.toymoban.com/news/detail-813607.html

到了这里,关于java使用jsch处理软链接判断是否文件夹的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java如何判断某文件目录是否存在

    在java中如何判断某文件所在的目录是否存在,若不存在创建目录 可以通过国使用 File 类的 getParentFile() 方法来获取文件所在的目录,并通过 exists() 方法来判断该目录是否存在,若不存在,通过 mkdirs() 方法创建目录,以下为实例 或直接简写

    2024年02月12日
    浏览(24)
  • 【Java SE】判断两个文件内容是否相同的多种方法

    逐字节比较文件内容。这种方法适用于小文件,但对于大文件会比较耗时。 计算文件的哈希值(如 MD5、SHA-256 等),然后比较两个文件的哈希值。如果哈希值相同,则可以认为文件内容相同。这种方法适用于大文件,因为只需要比较哈希值而不是整个文件内容。 通过使用

    2024年02月07日
    浏览(21)
  • Java文件处理(一):创建文件、遍历文件夹、删除文件/文件夹

    本篇以代码为核心,在实践中自学吧年轻人~ 要进行文件处理肯定需要 File 类啦。 File 的实例是一个实例(?),但是可以链接到本地的文件、文件夹,并对它们进行操作。 从下面的一些示例中可以看到,同一份本地文件可以拥有多个File对象;同时,构造一个File对象时传入

    2024年02月05日
    浏览(27)
  • java 处理常量字符串过长 & springboot 项目读取 resouces 文件夹下的文件内容

    项目里面有一长串的加密字符串(最长的万多个字符),需要拼接作为参数发送给第三方。 如果我们使用 枚举 定义的话,idea 编译的时候就会出现编译报错 网上还有一个说法,说是编译器问题,修改 idea 工具的编译为 eclipse 即可。 但是结果我仍然不满意,所以我决定把他放在

    2023年04月13日
    浏览(32)
  • IDEA项目java文件夹出现source root标记怎么处理

    在复制项目时出现如下标记 同时src下面无启动入口 解决办法如下: 1、选中项目,右键—open module Settings----Modules----选中项目—右边删除后 2.点击Apply----- OK 这时回到项目能看到目录正常,自动生成了启动入口,但是有些依赖没有。 3.通过Maven重新加载依赖 完成!

    2024年02月16日
    浏览(20)
  • 【Shell-HDFS】使用Shell脚本判断HDFS文件、目录是否存在

    本文主要讲述如何使用 Shell 脚本判断 HDFS 文件或目录是否存在,算是一个小技巧吧,这几天做 distcp 的时候用到的,因为要判断 HDFS 中是否存在某个目录。 Shell脚本测试: 1、测试路径是否存在。 2、测试目录是否存在。 3、测试文件是否存在。 4、测试路径大小是否大于0。

    2023年04月24日
    浏览(36)
  • C++ 判断路径为文件夹还是文件

    头文件 Path   指定标识文件的路径名。根据所使用的接口,此名称的解释不同。如果指定了DirFileDescriptor并且Path是一个相对路径名,那么Path被认为是相对于DirFileDescriptor指定的目录的。 Buffer 指定指向在其中返回信息的状态结构的指针。stat结构在sys/stat.h文件中描述。 成功完

    2024年02月01日
    浏览(64)
  • 用python实现检查一个文件夹中所有word文件内容是否重复

    要检查一个文件夹中所有Word文件的内容是否重复,你可以使用Python的 python-docx 库来读取Word文件的内容,并使用Python的集合数据结构来检查重复项。 以下是一个示例代码,演示如何实现这个功能: python复制代码 import os from docx import Document def get_word_files(directory): \\\"\\\"\\\"获取指定目

    2024年01月23日
    浏览(25)
  • java使用JSch连接服务器实现命令交互

    JSch官网 这里通过jsch远程连接linux服务器,并在控制台实现命令的交互。 创建UserInfo类,实现UserInfo接口(必须)、UIKeyboardInteractive接口(可选)。 将public boolean promptYesNo(String s)方法的返回值更改为true。 启动前确保linux服务器22端口开启。 当main函数启动后,就可以将控制台当

    2024年02月12日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包