我在Windows 64位上使用Oracle Java 7。
当我使用Files.createSymbolicLink创建符号链接时,我注意到了这种行为:
The type of the symlink is fixed and never changes,无论其目标有任何变化。
使用Windows的本机mklink
命令,可以强制链接类型为“目录符号链接”。是否可以使用本机Java API或某些库实现此目的?
一种琐碎而丑陋的方式是:
的fugly。
答案 0 :(得分:2)
不幸的是,我没有在Java API中看到这样做的方法。
我检查了Windows JRE代码,看起来决定是基于文件属性本身:
try
{
WindowsFileAttributes windowsfileattributes = WindowsFileAttributes.get(windowspath2, false);
if(windowsfileattributes.isDirectory() || windowsfileattributes.isDirectoryLink())
i |= 1;
}
属性本身来自原生代码,看起来无法影响它们。
显然,您还可以使用其他选项,例如手动调用mklink
,甚至使用PowerMock
之类的操作来处理返回的对象(显然不是为此目的)。
另一个脏选项是创建所有相关类的代理:Path
,FileSystem
和FileSystemProvider
。
它的工作方式是Path
返回FileSystem
,返回FileSystemProvider
- 您需要做的是修改FileSystemProvider.createSymbolicLink
方法的行为方式。
createSymbolicLink
方法接收到当前未使用的varargs参数 - 您可以向其传递一个参数,该参数将指示您的包装器需要覆盖创建符号链接的方式 - 然后你去:)
写完所有这些之后 - 我唯一的问题是 - 为什么你需要这种行为?