2009-02-08 5 views
12

주어진 파일에 대해 시스템 기본 편집기를 여는 방법을 찾으려고합니다.주어진 파일에 대해 사용자 시스템 기본 편집기를 여는 방법은 무엇입니까?

말은 자바로 작성된 파일 관리자입니다. 사용자가 폴더로 이동하여 파일 목록을 봅니다. 예를 들어 파일 Icon.jpg이 있습니다. 사용자가 파일 이름을 두 번 클릭하면 시스템의 기본 편집기 (예 : 김프)에서 파일이 열립니다. 주요 쟁점은 - 그것을하는 방법?

우리는 Runtime.getRuntime().exec("something file")을 할 수 있지만 사용자 환경에서 어떤 프로그램이 선호되는지 알아야합니다. 그러나 어떻게?

Desktop.getDesktop().edit(File file)도 수행 할 수 있지만이 방법으로는 프로세스를 추적 할 수 없으며이 하위 프로세스가 종료되었음을 알 수 없습니다. 다른 문제 - 리눅스에서는 (적어도 우분투 8.10에서는) 함수가 작동하지 않습니다. Desktop.getDesktop().open(File file)도 있지만 해당 파일 형식의 시스템 뷰어 대신 파일 뷰어를 강제로 열어야합니다.

저는 일주일 내내 해결책을 찾고 있지만 적합하고 일반적인 것을 찾지 못했습니다. 이 질문에 대한 다른 접근법을 알고 있습니까? 내 프로젝트의 경우 Windows + Linux + Mac에서 작동한다면 충분할 것입니다.

답장을 보내 주셔서 감사합니다. 2009년 2월 8일 23시 4분

다른 제안에

편집 : "파일 열기"와 맥에서와 마찬가지로, 윈도우와 리눅스에서 "응용 프로그램 선택"창을 강제 할 수 있습니까? 예를 들어, 파일을 열려고하면 시스템 선호 목록에서 응용 프로그램을 선택하라는 메시지가 표시됩니까? (Windows 탐색기에서 "Open with ..."과 같은). 아십니까?

+0

다른 제안 : 나는 맥과 윈도우와 리눅스에서 "응용 프로그램 선택"창을 강제 할 수 있습니까? 예를 들어 파일을 열려고하면 시스템 목록에서 응용 프로그램을 선택하라는 메시지가 나타납니다. (Windows 탐색기에서 "Open with ..."과 같은 것). 알고 계십니까? –

답변

7

: 귀하의 경우에, 당신은 당신이 특정 플랫폼, 당신은 다음과 같은 것을 (나는이 코드를 테스트하지 않은 경우) 할 수있는이 호출을 지원하는지 확인하려면 edit()

를 호출 할 것 같은데 당신은 당신이 운영체제를 구별 할 필요가 java.awt.Desktop 사용할 수없는 경우 : 윈도우 :

RUNDLL32.EXE SHELL32.DLL,OpenAs_RunDLL <file.ext> 

리눅스 :

edit <file.ext> 

맥 :

open <file.ext> 

HTH. 분명히 그건 휴대용이 아닙니다 ...

+0

이것들은 콘솔 명령입니다. Runtime.getRuntime(). exec() 함수에 작성해야합니다. –

+0

@ArturasSmorgun, 맞아. –

+0

OpenAs_RunDLL은 문서화되어 있지 않으며 항상 작동하지는 않습니다. (http://stackoverflow.com/questions/23566667/rundll32-shell32-dll) –

2

이 크로스 플랫폼 아니지만, 맥 OS X에 당신이 open(1) 실행 파일이 실행 할 수있는 권리 프로그램을 선택하는 LaunchServices를 사용하고 filename라는 이름의 파일을 열 것을 사용

Runtime.getRuntime().exec("open filename"); 

할 수 .

+0

고마워, 나는 그것을 시도 할 것이다. 지금은 우분투와 리눅스에서만 내 코드를 테스트 할 수 있었고 Mac에서 어떻게 사용했는지 모르기 때문에 이것은 매우 유용합니다. :) –

7

java.awt.Desktop 개체를 확인하십시오.

public boolean editFile(final File file) { 
    if (!Desktop.isDesktopSupported()) { 
    return false; 
    } 

    Desktop desktop = Desktop.getDesktop(); 
    if (!desktop.isSupported(Desktop.Action.EDIT)) { 
    return false; 
    } 

    try { 
    desktop.edit(file); 
    } catch (IOException e) { 
    // Log an error 
    return false; 
    } 

    return true; 
} 
+0

나는 edit()가 우분투에서는 작동하지 않는다는 것을 확실히 알고있다. 그러나이 기능은 나를 위해 필요합니다. edit()가 지원되지 않으면 어떻게해야하는지 알고 있습니까? –

-2

이 창

에서 작동합니다
Runtime.getRuntime().exec("CMD /C START filename.ext "); 
+0

Nope. 그렇지 않을 것이다; – westman379

관련 문제