相关疑难解决方法(0)

为什么'File.exists'返回true,即使NIO'Files'类中的'Files.exists'返回false

我正在尝试确定网络文件夹中是否存在文件:

// File name is "\\QWERTY\folder\dir\A123456.TXT"
Path path = Paths.get("\\\\QWERTY\\folder\\dir\\A123456.TXT")
Run Code Online (Sandbox Code Playgroud)

使用NIO Files:

Files.exists(path) == false
Run Code Online (Sandbox Code Playgroud)

使用File:

path.toFile().exists() == true
Run Code Online (Sandbox Code Playgroud)

File根据我们的测试,使用似乎是正确的.为什么File工作比Files

那么,这是什么?不能两者兼得!

但是等等,还有Files.notExists(path).

当网络共享文件实际存在时

Files.exists(path): false
Files.notExists(path): false
path.toFile().exists(): true
Run Code Online (Sandbox Code Playgroud)

当网络共享文件实际上并不会存在

Files.exists(path): false
Files.notExists(path): true
path.toFile().exists(): false
Run Code Online (Sandbox Code Playgroud)

另一种同样疯狂的方式来看上面的三个结果

boolean exists = Files.exists(path) || !Files.notExists(path)
boolean notExists = Files.notExists(path) || !Files.exists(path)
boolean oldFashionedExists = path.toFile().exists()
Run Code Online (Sandbox Code Playgroud)

:smileyFace:

环境与评论

该程序在Windows 8.1 Pro 32位计算机(操作系统和计算机)上运行,并从Windows 2008 R2(32位)计算机检查网络共享.

为了确定Files.exists失败,我安装了一个WatchService来监视该文件夹,并在Files.exists检查时看到该文件确实存在.然后我记录了两个方法,发现File.exists是正确的.

现在,在我的代码中,我将检查为Files.exists(path) || path.toFile().exists().

有点必须做两件事似乎很愚蠢.可能只是逃脱后来.只是试图让工程师在甲骨文身上得到怀疑的好处,但整个事情是相当愚蠢的,他们报告的不同. …

java nio file file-exists

14
推荐指数
1
解决办法
1万
查看次数

IntelliJ是否以管理员权限启动进程?

我在Windows 7上运行IntelliJ,我正在尝试解决一个无法启动Selenium的问题.我认为这可能与特权有关.

我正在以"以管理员身份运行"启动IntelliJ.IntelliJ启动的进程是否也具有管理员权限?

intellij-idea windows-7

11
推荐指数
1
解决办法
9245
查看次数

Windows上的Java:测试Java应用程序是否作为提升的进程运行(具有管理员权限)

情况

我有一个(基于Eclipse RCP)Java应用程序在多个平台上运行.除了Windows之外,我在所有平台上都弄明白了.

安装程序:我的应用程序安装程序始终以提升模式运行,因此可以将应用程序安装到C:\Program files\MyProduct.从用户角度来看,这意味着安装程序只能由管理员执行,UAC将要求确认.这很好用.

正常使用:普通用户可以启动应用程序.不需要管理员权限.这很好用.

自动更新:自动更新功能也会写入C:\Program Files\MyProduct,因此也需要管理员权限.这就是为什么应用程序虽然可以作为普通应用程序启动,但必须作为升级过程运行以自动更新.从用户的角度来看,它应该是" 以管理员身份运行 "来自动更新.

我想进行运行时检查以查看我的Java进程是否处于提升模式(即查看它是否是' 以管理员身份运行 '.

请注意,它可能是仅限Windows的解决方案.使用Java反射API,我可以在运行时检查Windows和/或特定于实现的类.

研究

我只在StackOverflow上找到了这个问题: 检测Java应用程序是否作为Windows管理员运行

但是,该解决方案将返回活动用户是否为Administrator组的成员.用户可能仍然以非提升模式启动我的应用程序.我已经证实了这一点.

注意

我知道Eclipse RCP应用程序会在用户目录中自动安装更新,当他或她没有管理员权限时,我想阻止这种情况.

我想允许特定于用户的配置(工作正常),但允许用户特定的更新将在卸载后留下太多混乱.

java windows privileges administrator eclipse-rcp

5
推荐指数
2
解决办法
3435
查看次数

Files.exists(path)为false,但file.exists()为true

为什么此代码返回false?

Path path = Paths.get("C:\\aaa\\bbb\\ccc");
Files.exists(path); // false!?
Run Code Online (Sandbox Code Playgroud)

即使当我从文件(存在)转换为它时:

File file = new File("C:\\aaa\\bbb\\ccc");
file.exists(); // true!!!
Path path = file.toPath();
Files.exists(path); // still false!?
Run Code Online (Sandbox Code Playgroud)

java

3
推荐指数
1
解决办法
80
查看次数