I've written a class for doing Spotlight searches from Java. It's just a
simple wrapper around mdfind and mdls, and could be improved in lots of
ways, but it works pretty well for something written in about half an
hour. I'm posting it here in the hope that other people will find it
useful, and possibly improve it further.
Peter
import java.io.*;
import java.util.*;
/**
* This class performs filesystem searches using the Spotlight facility in Mac OS X
* versions 10.4 and higher. The search query is specified using the syntax of the
* mdfind command line tool. This is a powerful syntax which supports wildcards,
* boolean expressions, and specifications of particular metadata attributes to search.
* For details, see the documentation for mdfind.
*
* @author Peter Eastman
*/
public class Spotlight
{
/**
* Perform a Spotlight search.
*
* @param query the query string to search for
* @return a list of all files and folders matching the search
*/
/**
* Perform a Spotlight search.
*
* @param query the query string to search for
* @param folder the search will be restricted to files inside this folder
* @return a list of all files and folders matching the search
*/
private static List<File> doSearch(String command[]) throws IOException
{
Process process = Runtime.getRuntime().exec(command);
BufferedReader out = new BufferedReader(new InputStreamReader(process.getInputStream()));
ArrayList<File> results = new ArrayList<File>();
String line;
while ((line = out.readLine()) != null)
results.add(new File(line));
return results;
}
/**
* Get a map containing all searchable metadata attributes for a particular
* file or folder.
*
* @param file the file to report on
* @return a Map containing all metadata for the file
*/
public static Map<String,String> getMetadata(File file) throws IOException
{
Process process = Runtime.getRuntime().exec(new String[] {"mdls", file.getAbsolutePath()});
BufferedReader out = new BufferedReader(new InputStreamReader(process.getInputStream()));
HashMap<String,String> results = new HashMap<String,String>();
String line;
while ((line = out.readLine()) != null)
{
int equals = line.indexOf('=');
if (equals > -1)
{
String key = line.substring(0, equals).trim();
String value = line.substring(equals+1).trim();
results.put(key, value);
}
}
return results;
}
}
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Java-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden