我想知道为什么Java不提供chdir调用实现的实际原因,但它提供了相同的本机接口。
答案 0 :(得分:2)
可以在Sun / Oracle的bug数据库中找到完整的评估版,其中包含问题编号 JDK-4045688 : Add chdir or equivalent notion of changing working directory
由于任何解决方案都存在重大问题,因此决定关闭该票证,并且没有报告该错误的客户真正需要它 - 所有这些客户都能够使用解决方法。
错误数据库中的一段摘录突出了添加此类调用的问题:
评价
此功能可以通过两种方式解释:chdir可以改变 包含JVM的进程的当前工作目录,导致 所有线程要同时更改,或提供更多"虚拟" 当前目录的每线程概念,在概念上可以是一个 ThreadLocal的。这只是建立起来的便利 要传递给底层操作系统API的完整路径名。
这是当前目录在Emacs中的工作方式 - 它只是一个 变量,但是可以具有缓冲区本地值的魔术变量。 Emacs的 在这个意义上,缓冲区有点像Java线程。这样的 实施将提供方便和安全。有每个线程 使用ThreadLocal当前目录提供程序员体验 熟悉旧的Unix greybeards,除了Threads替换 过程
此处还描述了许多变通方法,例如使用新的当前目录执行子进程,或者始终使用您希望相对部分开始的父目录限定文件访问。