我发布了这个问题堆栈溢出,然后有人将我重定向到这里:
大家好。我正在用 Java 开发一个 Windows 服务,这个服务会列出目录中的文件并将结果写入文件中。我的问题是,当服务运行时,当我调用 Java.File.isDirectory() 时,结果总是 false(当我像其他程序一样手动运行服务时,它运行良好)。此外,如果我尝试以下操作:当我将程序作为服务运行时,for(File F : directorio.listFiles()) 会抛出异常。我相信这与权限有关,因为当我将运行服务的帐户更改为我自己的凭据时,它会正确列出文件。您知道是否有解决方法吗?(更改 Windows 策略、另一种特殊帐户、另一种列出目录文件的方法,或者我可能遗漏的任何其他内容)。提前致谢。
答案1
感谢您的帮助!我发现了我的问题,我从一个配置文件中读取路径,我假设该文件位于用户主目录中(我的主目录和系统的主目录不一样……我的错)。不幸的是,我没有意识到这一点,因为我使用的是回收类(:S)。再次感谢您。
答案2
根据文档文件.isDirectory(),听起来您可能启用了安全管理器。isDirectory 需要启用 checkRead 权限,您可以使用类似下面的方法自己测试一下(根据需要编辑):
SecurityManager security = System.getSecurityManager();
if(security)
if(security.checkRead(FILE_PATH_HERE))
// we have permission
else
// no permission
将目录添加到允许目录列表中可能在您要做的事情中,也可能不在。如果是这种情况,有数十个 Google 链接提供说明。如果您想完全禁用 SM,也是如此。