Request Mac OS X Spotlight from Java

Associated with:

Windows Search Query with Java

But this time use the OSX backlight

I would like to use the OSX floodlight service with Java. Is the API accessible?

.

+3
java macos spotlight
source share
2 answers

There is no Java API for Spotlight that I know of (I don't think it was added to the legacy Cocoa -Java bridge development on the bridge). There is a procedural C API for Spotlight, however you can wrap a JNI .

+3
source share

I found code that wraps the mdfind command line, works fine for me:

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 */ public static List<File> find(String query) throws IOException { return doSearch(new String[] {"mdfind", query}); } /** * 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 */ public static List<File> find(String query, File folder) throws IOException { return doSearch(new String[] {"mdfind", "-onlyin", folder.getAbsolutePath(), query}); } 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; } } 
+2
source share

All Articles