在最近的windows版本中,您可以点击开始菜单并开始输入以在整个文件系统中搜索文件。有没有办法在Java中以编程方式执行该操作?Java可以访问操作系统中的搜索文件系统功能吗?
我的具体目的是让用户选择一个文件或目录。用户可以直接在应用程序内输入文件名,并可以开始显示建议。在典型的文件选择器中导航目录要容易得多。
在最近的windows版本中,您可以点击开始菜单并开始输入以在整个文件系统中搜索文件。有没有办法在Java中以编程方式执行该操作?Java可以访问操作系统中的搜索文件系统功能吗?
我的具体目的是让用户选择一个文件或目录。用户可以直接在应用程序内输入文件名,并可以开始显示建议。在典型的文件选择器中导航目录要容易得多。
这篇文章详细介绍了办法做到这一点在Windows中,通过访问本机功能:
Query Windows Search from Java
而这其中的细节,你怎么可以在Mac OS做同样的事情(使用mdfind
):
http://lists.apple.com/archives/Java-dev/2006/Oct/msg00224.html
什么你在你的问题的第二部分要求可以用一个简单的完成:
File dir = new File("/path/to/dir");
String[] contents = dir.listFiles();
第一部分是有点困难,但它可以通过完成内的Java同样的技巧递归地调用。 (for(String fl: contents){ /* do the above */ })
你不想担心在这里支持命令行调用的包装。这是反平台独立。
这是一个线性搜索。现代系统可能有很多文件。这可能非常缓慢并且消耗大量资源。操作系统的文件查询服务可以更快速地进行搜索。 –
实际上,他不会一次查看一个或两个以上的文件夹。从OP的q中,OP可能一次只能看一个。他真的想支持'find /'与'dir C:\/s' – cwallenpoole
从问题:“跨文件系统搜索文件...比在典型文件选择器中导航目录要容易得多。” –
你可以编写JNI代码来包装+公开任何Windows本地功能。
如果它只是用于文件对话框中的自动完成样式行为,则不需要包装本地功能,只需使用java.io中的标准东西即可。
或者你可能会发现JNA更容易。就我个人而言,我使用JNA来创建一个本机的,平台中立的胶水API,到目前为止已经实现了Mac Spotlight。 –
声音不太可能成为Java的一部分,因为Java应该是平台无关的。这样的搜索应该需要对所有文件进行某种索引,并且也是有效的。
它非常适合Java 7 NIO.2文件系统API,它具有平台相关功能。该索引在某些操作系统上已经存在。 –
不是每个操作系统都有这种功能吗? Windows 7有一个很棒的开始菜单和改进的搜索功能,Windows XP有一个搜索功能,只需要再次点击一次,Mac OS有Spotlight,只需要一次按键,大多数类型的Linux都有类似于XP的搜索功能... – Ryan