2009-05-04 7 views

Répondre

3

Il n'y a pas d'API Java pour Spotlight que je connaisse (je ne pense pas qu'elle ait été ajoutée au développement de pont Cocoa-Java désormais obsolète sur le pont). Toutefois, il existe une procédure C API pour Spotlight que vous pouvez utiliser avec JNI.

2

I found some code qui enveloppe la ligne de commande mdfind, fonctionne très bien pour moi:

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; 
    } 
}