Windows:使用File.listRoots显示映射的网络驱动器

时间:2014-03-06 16:38:36

标签: java windows filesystems

代码:

import java.io.*;

public class TestFileRoots {

    public static void main(String[] args) {
        for(File f : File.listRoots()){
            System.out.println(f.getAbsolutePath());
        }
   }

}

当我启动cmd并运行此类时,列出了我的所有驱动器。当我以管理员身份启动cmd并运行它时,我的映射网络驱动器未列出。

此外,当我手动启动服务器并调用File.listRoots()时,会列出我的所有驱动器。但是,当我使用服务启动服务器时,未列出网络驱动器。

如何始终列出我的网络驱动器?我读过我可以在服务中映射网络驱动器,但这不是一个选项。驱动器已经存在,我不允许改变它。

1 个答案:

答案 0 :(得分:6)

映射的驱动器是特定于用户的(可能在登录期间映射)而不是特定于计算机的。因此,映射驱动器上的userA日志时。当您以不同的用户(即作为管理员或作为SYSTEM运行的服务)启动程序时,映射的驱动器不可用,因此您无法访问它们。您的选择是:

  • 以新用户(即服务)
  • 再次映射驱动器
  • 在当前用户的上下文中运行您的应用程序
  • 通过UNC路径访问您需要的文件(即代替s:\blah使用\\server\shared_folder\blah