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

3

感到沮丧。这在开发环境中可以运行,但在生产环境中不能运行。这似乎是权限问题,但我不能假设(因为网络映射对每个人都是开放的,并且从两台机器都可以访问)。

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

  • gohere=\\main\sub

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

        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
        }

值得注意的是:
  • 这段代码在本地工作得很好。但一旦在另一个服务器上运行,它就会失败,因为它认为这不是一个目录。这个目录可以从两台机器上访问,已经确认过。

你有什么想法吗?我正在疯狂尝试找出问题所在。

编辑:

现在看来,这似乎是Windows任务计划程序的问题。我可以通过CMD成功运行应用程序。但是从任务管理器中,它不能识别网络路径?

第二次编辑:

我已经找到了解决问题的方法。这与Java无关,似乎与Windows任务设置和通过Java中的File类访问文件有关。


是的 - 我可以在两台服务器上采用完全相同的网络路径,并查看目录内容。不需要凭据。 - user2124871
而 sys outs 是代碼右側的註釋 - user2124871
Windows 2008服务器 - 同一网络。 - user2124871
你使用哪个账户来运行任务?它是否具有正确的权限?暂时更改任务以使用你的账户。 - Marged
请使用与测试相同的用户运行它 - 您可以在计划任务中指定该帐户。也许正在运行的帐户没有网络访问权限或具有奇怪的权限设置。 - mikeb
显示剩余4条评论
2个回答

0

这似乎不是Java问题,而是Windows问题。只需将您的Java程序替换为常规Windows进程,您将看到相同的情况。只需从此进程检索和显示文件/目录属性,存储它们,进行分析,您将从Windows的角度看到差异。

我猜测任务计划程序在另一个ID /访问权限下运行,该ID /访问权限无法适当地访问此网络共享。您所描述的所有迹象都指向这种假设。


您是正确的。我会标记答案为正确,并添加解决此问题的信息。由于某种原因,问题在于我必须消除与用户一起存储密码(即使密码没有更改)。 - user2124871

0
经过深入挖掘,我得出结论,问题与生产服务器上的任务本身有关。
由于某种原因,当我使用以下设置时,文件类未将网络路径识别为目录:
  • 无论用户是否登录都运行(勾选不存储密码)。
当我取消“不存储密码”并允许其存储密码时,网络路径被识别。我认为这是因为网络路径确实需要您登录到网络中(每个服务器都是如此)。我假设此属性传递了空密码,因此没有目录。
这只是一种假设 - 但我可以百分之百确认,当您取消存储密码时,它确实起作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接