自己公司产品网站的好处,网站建设的收入来源,网页上的视频怎么下载下来,工程建设资料员报名网站前言
这一次主要是碰到一个问题。因为使用jsch去读取文件的时候#xff0c;有一些文件它是使用软链接制作的一个映射。因为这里面有一个问题。如果它是软链接你就无法判断他到底是文件。还是文件夹#xff1f;因为他没有提供可以直接读取的方法#xff0c;用权限信息去判断…前言
这一次主要是碰到一个问题。因为使用jsch去读取文件的时候有一些文件它是使用软链接制作的一个映射。因为这里面有一个问题。如果它是软链接你就无法判断他到底是文件。还是文件夹因为他没有提供可以直接读取的方法用权限信息去判断文件和文件夹都是l开头所以这一篇博客的主要目的是介绍如何去处理软链接。判断是实际的文件还是文件夹。
遇到的问题
从Jsch的参数来看首先这里他提供的一些Is link是为true的。但是判断是文件还是文件夹全部都会frse这个就比较苦恼了。一开始我还在想他会不会没有提供对应的方法这样我就很难搞了我还得去找作者去提一手然后就让他去解决这时间可就太漫长了。 接着这是Linux系统的一个文件目录。可以看到有一些目录它是做了一个链接映射的。 实际测试发现他是软件链接目录isDir和isFile方法都是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腾讯技术创作特训营第五期有奖征文快来和我瓜分大奖