2011-08-16 140 views
1

在最近的windows版本中,您可以点击开始菜单并开始输入以在整个文件系统中搜索文件。有没有办法在Java中以编程方式执行该操作?Java可以访问操作系统中的搜索文件系统功能吗?

我的具体目的是让用户选择一个文件或目录。用户可以直接在应用程序内输入文件名,并可以开始显示建议。在典型的文件选择器中导航目录要容易得多。

+0

不是每个操作系统都有这种功能吗? Windows 7有一个很棒的开始菜单和改进的搜索功能,Windows XP有一个搜索功能,只需要再次点击一次,Mac OS有Spotlight,只需要一次按键,大多数类型的Linux都有类似于XP的搜索功能... – Ryan

回答

1

什么你在你的问题的第二部分要求可以用一个简单的完成:

File dir = new File("/path/to/dir"); 
String[] contents = dir.listFiles(); 

第一部分是有点困难,但它可以通过完成的Java同样的技巧递归地调用。 (for(String fl: contents){ /* do the above */ })

你不想担心在这里支持命令行调用的包装。这是反平台独立。

+0

这是一个线性搜索。现代系统可能有很多文件。这可能非常缓慢并且消耗大量资源。操作系统的文件查询服务可以更快速地进行搜索。 –

+0

实际上,他不会一次查看一个或两个以上的文件夹。从OP的q中,OP可能一次只能看一个。他真的想支持'find /'与'dir C:\/s' – cwallenpoole

+0

从问题:“跨文件系统搜索文件...比在典型文件选择器中导航目录要容易得多。” –

1

你可以编写JNI代码来包装+公开任何Windows本地功能。

如果它只是用于文件对话框中的自动完成样式行为,则不需要包装本地功能,只需使用java.io中的标准东西即可。

+0

或者你可能会发现JNA更容易。就我个人而言,我使用JNA来创建一个本机的,平台中立的胶水API,到目前为止已经实现了Mac Spotlight。 –

0

声音不太可能成为Java的一部分,因为Java应该是平台无关的。这样的搜索应该需要对所有文件进行某种索引,并且也是有效的。

+0

它非常适合Java 7 NIO.2文件系统API,它具有平台相关功能。该索引在某些操作系统上已经存在。 –