- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个项目,该项目部分显示 JTable 中目录中的所有文件,包括子目录。用户可以双击子目录以使用新目录的内容更新表。但是,我遇到了问题。
我的文件列表是用 file.listFiles() 生成的,它会拉出所有内容:隐藏文件、锁定文件、操作系统文件、整个工具包和一堆文件,但我无法访问所有这些文件。例如,我无权读取/写入“C:\Users\user\Cookies\”或“C:\ProgramData\ApplicationData\”。不过没关系,这不是访问这些内容的问题。相反,我不希望程序显示它无法打开的目录。但是,我无权访问的目录和我访问的目录的行为几乎完全相同,这使得过滤掉它们非常困难。
我发现的行为的唯一区别是,如果我在锁定的目录上调用 listFiles(),它会返回 null。这是我用作过滤器的代码块:
for(File file : folder.listFiles())
if(!(file.isDirectory() && file.listFiles() == null))
strings.add(file.getName());
其中“文件夹”是我正在查看的目录,“字符串”是该目录中文件名称的列表。这个想法是,只有当我允许编辑的文件或目录时,文件才会加载到列表中。过滤方面有效,但有些目录包含数百个子目录,每个子目录又包含数百个文件,并且由于 listFiles() 的复杂度为 O(n),因此这不是一个可行的解决方案(list() 不是也没有更好)。
但是,file.isHidden() 返回 false
canWrite()/canRead()/canExecute() 返回 true
getPath() 返回与 getAbsolutePath() 和 getCanonicalPath() 相同的结果
createNewFile() 对所有内容都返回 false,甚至我知道的目录都可以。另外,即使这种解决方案有效,我也想避免这种解决方案。
是否有一些我不知道的方法或实现可以帮助我查看该目录是否可以访问而无需解析其所有内容?
(我运行的是 Windows 7 Professional,使用的是 Eclipse Mars 4.5.2,所有 File 实例都是 java.io.File)。
最佳答案
您遇到的问题是您正在处理文件
。据大家所知,在 2016 年,事实上,自 2011 年(Java 7 发布)以来,它已被 JSR 203 取代。
现在,什么是 JSR 203?它是一个全新的 API,可以处理任何文件系统和文件系统对象;它扩展了“文件系统”的定义,以包括您在本地计算机上找到的内容(JDK 所谓的“默认文件系统”)以及您可能使用的其他文件系统。
如何使用它的示例页面:here
此 API 的众多优点之一是它允许访问您以前无法访问的元数据;例如,您在评论中特别提到您想知道 Windows 认为哪些文件为“系统文件”。
您可以这样做:
// get the path
final Path path = Paths.get(...);
// get the attributes
final DosAttributes attrs = Files.readAttributes(path, DosFileAttributes.class);
// Is this file a "system file"?
final boolean isSystem = attrs.isSystem();
<小时/>
现在,什么是Paths.get()
?如前所述,API 使您可以一次访问多个文件系统;一个名为 FileSystems
的类提供对 JDK 可见的所有文件系统的访问(包括创建新文件系统),并且始终存在的默认文件系统由 FileSystems.getDefault()
给出。
FileSystem
实例还允许您使用 FileSystem#getPath
访问 Path
.
将其结合起来,您会发现这两者是等效的:
Paths.get(a, b, ...)
FileSystems.getDefault().getPath(a, b, ...)
<小时/>
关于异常:File
对异常的处理非常糟糕。仅举两个例子:
File#createNewFile
如果无法创建文件,将返回 false;File
对象指向的目录内容,
File#listFiles
将返回 null。JSR 203 没有这些缺点,而且还有更多缺点。让我们采用两种等效的方法:
File#createNewFile
变为 Files#createFile
;File#listFiles
变为 Files#newDirectoryStream
之一(或衍生物;请参阅 javadoc)或(自 Java 8 起)Files#list
.这些方法和其他方法在行为上有根本的区别:如果发生故障,它们将抛出异常。
更重要的是,您可以区分这是什么异常:
FileSystemException
或衍生错误,错误发生在文件系统级别(例如,“访问被拒绝”是一个 AccessDeniedException
);IOException
,那么问题就更根本了。此答案无法包含 JSR 203 的每个用例;这个 API 非常庞大,非常完整,尽管并非没有缺陷,但无论如何它都比 File
所提供的要好得多。
关于java - 如何检查文件/目录是否是 protected 操作系统文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38706689/
这个问题在这里已经有了答案: How to make a property protected AND internal in C#? (8 个答案) 关闭 9 年前。 我需要声明一个既受又 内部保
我有以下代码: class Base{ protected val alpha ="Alpha"; protected def sayHello = "Hello"; } class
我正在尝试运行一个宏来创建一个工作正常的pdf。 Excel 文件获得签名后,Excel 文件将自动受到保护。 问题:我的工作表上有一个按钮,需要按下该按钮才能创建 pdf 文档网。然而,这是无法完成
子类需要能够使用种子随机数生成器。 使用的优点和缺点是什么 public abstract class AbstractClass { protected Random rnd; public
我们有两个类(class)(A 和 B)。 A类只能由继承它的类创建(A类)B 类可以由用户创建。 A 类,版本 1 有一个private 数据成员,并且有方法访问 A 类中的数据。 A 类,版本 2
当父类受到保护时,我对继承类的默认构造函数有疑问,在我看来,子类也会有一个默认构造函数受到保护,但事实并非如此。 除了在子类上强制默认构造函数外,还有其他方法可以强制保护默认构造函数吗? C++11
我有一个抽象类,我想在其 protected 构造函数中初始化一个只读字段。我希望这个只读字段在派生类中可用。 按照我将所有字段设为私有(private)并公开属性的习惯,我实现如下: abstrac
我在运行大数据时遇到错误。错误已由以下示例示例解释 加载数据 mdata <- as.matrix(read.table('https://gubox.box.com/shared/static
我在获取 时遇到问题非法访问错误 对于以下示例: 我在名为 arch 的 gradle 模块中声明了一个基类 abstract class BaseClass { protected abst
我相信通过 实现 JSF 应用程序的安全性+ + & 通过使用 是两种不同的方式!?他们是吗? 我尝试通过上述第一种方法(使用 + + )来实现安全性,但发现使用 protected 和不
有没有办法确定以下的二传手能见度差异: public Prop { get; protected set; } protected Prop { get; set; } 使用反射?还是那些与 C# 反
我读了一本关于 OOP 的书,并且关于“ protected ”访问修饰符的示例对我来说很奇怪。 例子总结 这个例子是为了测试“protected”保留字对变量的影响。 ClassA 有 2 个 pr
内部——在集会上公开,在其他地方私有(private)。 protected - 只有派生类可以访问父类成员。 Protected internal - protected OR internal -
我有一个类代表 Wicket 中带有“返回”、“前进”和“取消”按钮的基本页面。但并非所有页面都有所有按钮,例如。 G。第一页明显没有“返回”。 我的想法是定义一个通用的ActionHandler p
在了解到嵌套类是嵌套类的成员并因此可以完全访问嵌套类的成员这一事实后(至少对于 C++11,请参见 here),我在尝试创建嵌套类模板: #include using namespace std;
我刚刚使用了 Resharper,并一直在尝试将字段转换为属性。我希望这些属性受到保护,但 Resharper 不想给我这个选项。相反,只有一个 protected 内部选项。这让我思考。要么某处有一
这是 question 的扩展一个小时前问过。 当覆盖派生类中的虚方法时,我们不能修改访问修饰符。考虑 System.Web.UI 命名空间中的 Control 类 public class Cont
有人可以解释一下 C# 中 protected 和 protected internal 修饰符之间的区别吗?看起来他们的行为是相同的。 最佳答案 “protected internal”访问修饰符是
我想知道下面两行代码之间是否有区别: protected $var = null; protected $var; 我已经看到两者都被使用了,我想知道这是否只是一个偏好问题,(也就是 $var; 将变
我正在尝试使用mockito为“另存为”操作编写单元测试。该操作的一部分是制作并显示一个文件对话框,用户可以在其中输入要保存的文件。选择文件不是我可以自动化的操作,因此我想模拟 FileDialog
我是一名优秀的程序员,十分优秀!