- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
对于 Windows 上的本地文件,我得到的 Files.exists(path)
与 path.toFile().exists()
的结果不同。我可以在 Windows 资源管理器中看到这个文件,尽管我(随机)修改了权限并且权限可能没有意义。
但这并不能解释为什么旧方法返回 true 而新方法返回 false。该文件确实存在,但运行 Java 代码的用户可能看不到它,因此我不确定正确答案应该是什么。我也看不到如何查看哪个用户正在运行代码,计算机上只有一个真实用户 Paul,但我想知道是否以管理员身份运行是否会影响事情。
System.out.println("Path Exists(1):"+Files.exists(path));
System.out.println("Path Exist(2) :"+path.toFile().exists());
给予
Path Exists(1):false
Path Exist(2) :true
还有
System.out.println("Path readable(3) :"+Files.isReadable(path));
System.out.println("Path readable(4):"+path.toFile().canRead());
以同样的方式给予
Path readable(3) :false
Path readable(4):true
权限输出
File C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf permissions
owner:PCLAPTOP\Paul
NT AUTHORITY\SYSTEM:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:DENY
BUILTIN\Administrators:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:DENY
BUILTIN\Administrators:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:ALLOW
NT AUTHORITY\SYSTEM:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:ALLOW
BUILTIN\Users:READ_DATA/READ_NAMED_ATTRS/EXECUTE/READ_ATTRIBUTES/READ_ACL/SYNCHRONIZE:ALLOW
NT AUTHORITY\Authenticated Users:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/SYNCHRONIZE:ALLOW
c:\Code\jthink\opensrc\jaudiotagger>attrib C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf
A R C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf
更新我没有结论,但认为这些信息可能有用。
我在未启用 IDE 以管理员身份运行程序 选项的情况下在 IntelliJ IDE 中运行代码,启用此选项后 Java 应用程序也获得了管理员权限。
另一个文件很有趣,我没有添加任何拒绝权限,我只是禁用了继承权限并从所有组中删除了读取权限。然后,当我以用户身份运行而没有以管理员身份运行时,它无法读取文件,而且这段代码也无法输出任何信息
AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class);
if (view != null)
{
sb.append("Owner:"+view.getOwner().getName()+"**");
for (AclEntry acl : view.getAcl())
{
sb.append(acl.principal()+"**");
for(AclEntryPermission aep:acl.permissions())
{
sb.append(aep.toString() + "**");
}
}
}
但是当我启用以管理员身份运行程序时,它仍然无法读取文件,但上面的代码现在确实输出了一些权限,如下所示:
Owner:BUILTIN\Administrators
NT AUTHORITY\SYSTEM:WRITE_DATA/APPEND_DATA/WRITE_NAMED_ATTRS/WRITE_ATTRIBUTES/SYNCHRONIZE:ALLOW PCLAPTOP\Paul:WRITE_DATA/APPEND_DATA/WRITE_NAMED_ATTRS/WRITE_ATTRIBUTES/SYNCHRONIZE:ALLOW BUILTIN\Administrators:WRITE_DATA/APPEND_DATA/WRITE_NAMED_ATTRS/WRITE_ATTRIBUTES/SYNCHRONIZE:ALLOW
如您所见,即使 Administrators
没有 READ
或 READ PERMISSIONS
选项,他们也可以输出权限,而之前他们不能,可能是由于 BUILTIN/Administraor 被归还为所有者。
最佳答案
尝试阅读以下内容: https://docs.oracle.com/javase/tutorial/essential/io/check.html
它指出,Files.exists(path)
返回 false 并不意味着它不存在,所以是的,它似乎存在权限问题。也试试 Files.notExists(path)
看看它返回什么。如果为false则表示无法判断文件是否存在,如果返回true则可能是你的代码有问题。
尝试从命令行而不是 netbeans 运行您的文件。如果您不知道如何执行此操作,您可以只搜索谷歌,这方面有很多东西,但基本上您想要做的是用 javac myfile.java
编译 .java 文件然后用 java myfile
运行它。使用普通的命令提示符和以管理员身份打开的命令提示符执行此操作,看看会得到什么。
关于java - Files.exists(path) 和 path.toFile().exists() 对同一个文件给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35087699/
当我尝试执行 Path.toFile() 时,路径是 C:,由于某种原因,生成的文件默认为当前执行目录。 我在 C: 中的一个目录中执行 Scanner userInput = new Scanner
我正在将 Matlab 切换到 NumPy/SciPy,似乎 np.fromfile 和 ndarray.tofile 分别对应于 Matlab 中的 fread 和 fwrite。 为了测试这些 A
我有一个非常简单的问题,我只是找不到合适的答案。那是 [NSKeyedArchiver archiveRootObject:value toFile:filePath]; 根据苹果文档 here ,上
我发现了几个类似的问题,但没有一个能准确描述我面临的问题。我有一个 OBJ 文件,其中包含描述顶点位置的行: v 0.01214 0.4242 0.82874 我想将此数据转换为 matlab 友好的
当我尝试保存一个非常大的(20000 x 20000 元素)数组时,我得到了所有的零: In [2]: shape = (2e4,)*2 In [3]: r = np.random.randint(0
最近,我正在学习 NSKeyedArchiver 和 NSKeyedUnarchiver。我发现存在三种归档数组的方法,我正在尝试找出它们之间的区别。 1.使用archiveRootObject:to
我正在尝试下载一个zip文件,然后在解压缩之前将其写入cacheDirectory。但是,write(toFile :)始终返回false: import Foundation func downlo
我正在尝试从文件保存和恢复 arr.tofile("saved_arr.npy", sep=" ") #shape is (4, 5000, 5000) arr = np.fromfile("save
我正在使用 numpy 的 tofile() 将 float32 写入文件。 float_num = float32(3.4353) float_num.tofile('float_test.bin'
我目前正在使用 numpy.ndarray.tofile 函数传递存储在 numpy.ndarray 中的数据,该函数内置于 numpy.ndarray . 此功能的问题在于,它会在长行中输出所有数据
我有一个问题,我无法在 iOS 8 中保存,而它在 iOS 7 中运行良好。请问我的问题在哪里? .h NSMutableArray *selected; .m - (vo
我想保存到文件 NSSearchPathForDirectoriesInDomains(.CachesDirectory,.UserDomainMask, true)。我写了如下代码,但是它不能将文件
我已经在 Windows 中安装了一个网络驱动器(samba 服务器)。 我想在 Java 程序中读取该驱动器中的一个文件。 在我尝试使用以下方法读取文件之前: Paths.get(basePath,
使用 iOS 12,archiveRootObject:toFile:已被弃用。谁能建议一种简化的替代方法来将对象归档到文件中? //Generic example of archiver prior
我正在学习教程 Project10并尝试将其转换为 Swift 3.0。使用 UIImagePickerController 选择图像然后将其保存到 Documents Directory 是通常最简
对于 Windows 上的本地文件,我得到的 Files.exists(path) 与 path.toFile().exists() 的结果不同。我可以在 Windows 资源管理器中看到这个文件,尽
我正在尝试使用 writeCopy(toFile:, encryptionKey:) 更改我的 Realm 数据库的加密 key ,如下所示: public static func updateEnc
我是一名优秀的程序员,十分优秀!