2016-12-14 74 views
0

我正在处理一个项目,该项目用于制作任何特定Windows路径的文件列表。它逐个遍历所有文件和文件夹,并创建一个列表。 我想忽略所有MS Windows和MS产品的文件。 我从NSRL_FILE过滤了Microsoft产品列表。 但现在我不想遍历任何Windows文件夹或ms产品的文件夹。 有没有人有想法,我该如何实现这一点?我该如何忽略MS Windows文件

注意:我不想列出MS Windows和MS产品的相关文件夹名称列表,以便在遍历时忽略。

SOLUTION:我发现这个论坛link,它返回以下详细信息的解决方案......

CompanyName = Microsoft Corporation 
FileDescription = SQM Client 
FileVersion = 10.0.14393.0 (rs1_release.160715-1616) 
InternalName = sqmapi 
LegalCopyright = © Microsoft Corporation. All rights reserved. 
OriginalFilename = sqmapi.dll 
ProductName = Microsoft® Windows® Operating System 
ProductVersion = 10.0.14393.0 
OleSelfRegister = 
+0

那么,你必须知道“MS WIndows或MS产品文件”是什么。这不是一个编程问题。 – lexicore

+0

感谢您的回复,您的意思是,我们应该列出MS Products文件夹和文件以及MS Windows,然后在遍历时,在列表中检查它。最终用户不希望从文档文件夹中选择一个文件夹,一个来自下载,一个来自桌面文件夹。他希望他选择父文件夹,然后应用程序忽略与Microsoft相关的不需要的文件。我们有一个微软文件列表,我们需要相同类型的文件夹列表。 –

回答

1

你将必须有一个清单某处的文件夹名称,不容忽视。用每个名称创建一个文本文件,以忽略它。从程序中读取文件,如果找到与文件中路径匹配的路径,请忽略它。当您发现更多要忽略的文件夹时,只需将它们添加到列表中即可。

+0

OP说..我不想列出MS Windows和MS产品的相关文件夹名称列表忽略而遍历' – user3437460

+1

我知道他说,但除非有一些webservice或API,他可以打电话来获取列表,他会自己做。 –

+0

不,你没有明白我的观点。我想要这样的文件夹的列表,但不想手动准备。如果任何网站或服务提供这种类型的上传时间的列表。否则user3437460暗示也不错。 –

0

但现在我不想穿越任何Windows文件夹或ms产品的文件夹。有没有人有想法,我该如何实现这一点?

如果您不想保留要跳过的名称列表。我能想到的使用Java的唯一方法是从文件中读取元数据。

您可以尝试从文件的元数据中读取公司属性,并检查它是否与“Microsoft Corporation”匹配。

enter image description here

的检查也可以基于多个过滤器审核规定,例如文件扩展名。

Java有一个被称为BasicFileAttributes的类,您可以将它用于此目的。

看看这里的文档:https://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/BasicFileAttributes.html

注:我不知道这是否会很好地工作,但是这给你一个选择。

+0

感谢您的好建议,我会试试这个。 –

+0

@TejKiran还有其他的选择,但我认为这会让你更麻烦,所以这是你可以尝试的。如果有帮助,您可以接受/投票我的解决方案。谢谢。 – user3437460

+0

它仅返回以下细节{[email protected]} fileAttrs = 32 创建时间= 131131430412492635 的LastAccessTime = 131131430412492635 lastWriteTime = 131131430412492635 大小= 34128 reparseTag = 0 volSerialNumber = 0 fileIndexHigh = 0 fileIndexLow = 0。没有其他属性的详细信息 –

0

上user3437460的建议大厦,您可以检查所有者:

String owner = Files.getOwner(path).getName(); 
boolean isSystemFile = owner.equals("NT SERVICE\\TrustedInstaller"); 

它远非完美,但总比没有好。

在Windows 7中测试我不知道这是如何在其他Windows版本中的行为。