2013-08-16 7 views
0

Applescipt의 도움없이 Java로 Finde-Selection을 직접 가져올 수 있습니까? 기본적으로 Java에서 osascript를 실행하여 파인더 선택을 문자열로 전달하는 또 다른 AppleScript를 호출합니다. 고마워.Applescript의 도움없이 Java에서 직접 파인더 선택 받기

import java.io.*; 

public class FinderSelection { 
    public static void main(String [] args) throws IOException { 
     String[] cmd = { "osascript", "-e", "run script \"FinderSelection.scpt\" as POSIX file" }; 

     InputStream is = Runtime.getRuntime().exec(cmd).getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is); 
     BufferedReader buff = new BufferedReader (isr); 
     String line; 
     while((line = buff.readLine()) != null) 
      System.out.println(line); 
    } 
} 

FinderSelection.scpt

tell application "Finder" 
    set theSelection to selection 
    set item1 to POSIX path of (item 1 of the theSelection as alias) as string 
end tell 

** 수정 **

나는 도서관을했다. 그것을 here on github으로 얻을 수 있습니다.

당신은 외부 AppleScript로 파일을 제거하고이 줄을 사용하는데하여 코드를 단순화 할 수
+0

은 다른 값이 주어진 문자열 줄입니까? 화면에 인쇄 할 위치를 알려주지 만 가치는 부여되지 않았습니다. –

+0

나는 또한 입력 스트림 주위에 try/catch 블럭을 두어 던지며 예외를 잡아 내지는 않는 것이 나쁜 생각이다. –

+0

글쎄, 여기는 단순화 된 버전이며, 나에게도 효과적이다. 예상되는 결과도 얻는다. 하지만 문제는 애플 스크립트의 도움이없는 방법이 있다면, 아마도 i/o를 사용하는 것일까 요? – domizai

답변

1

...

String[] cmd = { "osascript", "-e", "tell application \"Finder\" to return POSIX path of ((item 1 of (get selection)) as text)" }; 
+0

네, 이것이 제가 결국 한 일입니다. java가 이미 이와 비슷한 것을 제공하는지 알고 싶었습니다. – domizai

+0

아니요, osascript 및 applescript 명령을 사용하는 것이 좋습니다. – regulus6633

0
String [] cmd = { "osascript", "-e", 
          "tell application \"Finder\" to set theSelection to (selection) as alias list", 
          "-e", 
          "set myFiles to {}", 
          "-e", 
          "repeat with i from 1 to length of theSelection", 
          "-e", 
          "set myFiles to myFiles & POSIX path of (item i of the theSelection as alias) & \", \" as string", 
          "-e", 
          "end repeat" 
         }; 

그래서 이것은로 구분 된 문자열, 파일을 저를 다시주는 명령입니다 쉼표 나는 나중에 하나의 문자열로 나눕니다. Dunno가 가장 좋은 방법이지만 작동하는 경우 ...

+1

코드가 작동 할 수도 있지만 반복 루프에 문자열을 추가하기 때문에 myFiles의 초기 값이 비어 있음을 알 수 없습니다. 빈 문자열이어야합니다. 따라서 나는 그 라인을 다음과 같이 변경한다 : myFiles를 ""로 설정한다. Finder의 목록이 이미 많은 별칭이기 때문에 "별칭"이 필요하지 않습니다. 또한 POSIX 경로가 문자열이기 때문에 "문자열로"필요하지 않습니다. 반복 루프를 사용할 때 : myFiles를 myFiles & posix path (theSelection의 항목 i) & "," – regulus6633