Files.createSymbolicLink() 创建符号链接的关键在于目标路径的相对性或绝对性、可访问性及系统权限;目标路径为字符串,JVM不校验存在性,但访问时系统按该路径解析;需确保用户权限、文件系统支持(如非FAT32),且推荐用Paths.get()安全构造路径。
Java 7+ 的
可以创建符号链接(软链接),但跨目录创建时需注意路径的**相对性或绝对性**、**目标路径的可访问性**以及**操作系统权限限制**。它本身不“跨目录”或“不跨目录”,关键在于你传入的
target
(目标路径)怎么写。
目标路径必须是有效的、可解析的路径
符号链接保存的是一个字符串路径(即你传给
的第二个参数)。JVM 不会校验该路径是否存在,但后续访问链接时,系统会按该字符串去解析。
若用
绝对路径
(如
),链接在任何位置都能指向同一目标;
若用
相对路径
(如
),则链接的解析起点是
链接自身所在目录
,不是当前工作目录。
正确构造目标路径:推荐用 Paths.get() 组合
避免手拼字符串出错。用
构建目标路径更安全,尤其涉及跨目录时:
必须有权限,且文件系统要支持
以下任一条件不满足都会抛
(如
或
):
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
立即学习
“
Java免费学习笔记(深入)
”;
运行 Java 进程的用户需有
在 link 所在目录中创建文件的权限
;
在 Linux/macOS 上通常默认支持;Windows 需启用开发者模式或以管理员身份运行(否则仅限管理员创建符号链接);
目标路径所在的文件系统不能是 FAT32、exFAT 等不支持符号链接的格式。
创建前无需确保目标存在,但链接不可用
不检查目标是否存在。你可以成功创建一个指向不存在文件的链接(即“悬空链接”),但之后调用
或打开它时会失败。
若需健壮性,建议先用
校验目标(注意加
,否则可能误判链接自身);
也可用
确认链接已建好。
Files.createSymbolicLink()createSymbolicLink()/home/user/docs/report.txt../docs/report.txtPaths.get()Path link = Paths.get("/opt/myapp/config.conf");
Path target = Paths.get("/etc/myapp/default.conf"); // 绝对路径 → 稳定可靠
// 或者用相对路径(假设 link 在 /opt/myapp/,想指向上级的 /etc/myapp/)
Path target = Paths.get("..").resolve("etc").resolve("myapp").resolve("default.conf");
// 结果为: ../etc/myapp/default.conf(字符串形式)
Files.createSymbolicLink(link, target);
IOExceptionAccessDeniedExceptionUnsupportedOperationExceptioncreateSymbolicLink()Files.exists(target)Files.exists(target, LinkOption.NOFOLLOW_LINKS)NOFOLLOW_LINKSFiles.isSymbolicLink(link)