找到链接目标会产生NIO异常,但可以在Windows下与ShellFolder一起使用

时间:2018-06-19 14:59:09

标签: java bufferedreader nio symlink hardlink

我正在对文件夹树中的不同类型的文件进行递归搜索。在搜索过程中找到.csv文件后,我用BufferedReader扫描了文件并将结果放入数据库中以进行进一步的操作。

.nio.程序包实用工具未遵循指向实际.csv文件的链接时,应用程序可以完美地运行到软链接或硬链接。

规范路径和绝对路径完全相等。甚至资源管理器中的文件属性也会显示“链接”,而在Java中搜索属性也会产生“非符号链接”结果。

使用

初始化主目录
File rootdir = new File ("..").getCanonicalFile();

没有效果。使用

.toRealPath() 

除了将符号链接文件视为实际文件而不是链接之外,没有任何作用,但是当涉及到BufferedReader时,我得到了NullPointerException。

我正在Windows 7上进行开发,但是目标环境是Linux,CentOS上运行的JBoss 7 AppServer。

唯一的解决方法-确实获得了指向链接目标的.csv文件的实际路径是:

String s = arr[index].getCanonicalPath();

ShellFolder folder = ShellFolder.getShellFolder(new File(s));
System.out.println("FOUND A LINK? " + folder.getFolderType()); //LINK

if (folder.isLink()) {
    fileToUse = folder.getLinkLocation(); // yaaay working!!!
}

这不是一个合适的解决方案,因为目标环境是在Linux发行版而非Windows下运行的服务器。该测试确实在本地Windows计算机上工作。虽然是相同的文件系统。

有人知道如何解决该问题吗?

这是Windows资源管理器视图(很抱歉,它是德语)。您可以看到已创建的软链接(如果我通过

创建为硬链接
ln source.csv target.csv

这是相同的行为。

screen shot of Details tab of File Properties dialog from Windows Explorer

0 个答案:

没有答案