Java - 网络目录不是文件或目录?

时间:2015-07-02 18:41:00

标签: java

沮丧。这适用于开发盒,但不适用于生产盒。这似乎是权限问题,但我无法假设(因为网络地图对所有人开放,并且可以从两台机器访问)。

我在属性文件中有一个目录:

  • gohere = \\主\子

在我的代码中,我从属性文件中正确读取了目录。这是代码:

        File dir = new File(dirFromProperty); // \\\\main\\sub

        System.out.println("dirFromProperty = " + dirFromProperty);
        System.out.println("dir File = " + dir); //looks right
        System.out.println("dir.isDirectory = " + dir.isDirectory()); //false?
        System.out.println("dir.isFile = " + dir.isFile()); //false?!
        System.out.println("dir.isHidden = " + dir.isHidden()); //false

        if(dir.isDirectory()) {
             //never gets here
        }

值得注意的是:

  • 这个确切的代码在本地工作。我在另一台服务器上运行的那一刻,它失败了,因为它认为它不是一个目录。该目录可通过100%确认的两台机器访问。

有什么想法吗?我很想弄清楚发生了什么事。

修改

目前,似乎这是Windows任务计划程序的一个问题。我可以从CMD运行应用程序。从任务管理器,它无法识别网络路径?

第二次修改:

我已经为我的问题添加了解决方案。这与Java无关,它似乎与Windows任务设置相关,并通过Java中的File类访问文件。

2 个答案:

答案 0 :(得分:0)

它看起来不像Java问题。这是Windows的问题。只需用常规Windows进程替换您的Java程序,您就会看到相同的结果。只需从此过程中检索并显示文件/目录属性,存储它们,进行分析,您将看到与Windows的不同之处。

我的猜测是,任务计划程序在另一个ID /访问权限下运行,该ID /访问权限没有对该网络共享的适当访问权限。所描述的所有迹象都表明了这一假设。

答案 1 :(得分:0)

经过多次挖掘,我得出的结论是,问题与生产服务器上的任务本身有关。

出于某种原因,当我使用以下设置时,File类没有将网络路径识别为目录:

  • 运行用户是否登录(检查不存储密码)。

当我取消选中“不存储密码”并允许其存储密码时,会识别网络路径。我假设这是因为网络路径确实要求您登录到网络(每个服务器都是)。我假设这个属性传递了一个空密码,因此没有目录。

这是所有假设 - 但是当您取消选中商店密码时,我可以100%确认它有效。