2

私は次の問題を抱えています:

ユーザーが特定のファイルを開くことができるアプリケーションを作成しました。ユーザーはエディターを選択できるはずです。彼はでファイルを開きたいと考えています。

現在、私はこのコードでそれを行っています:

public void open(String path) {
    try {
        if(new File(path).exists())
            Runtime.getRuntime().exec("notepad.exe " + path);

    } catch (IOException e) {

    }
}

ultraedit.exeたとえば、エディターをに変更すると、ランタイムはエディターを開くことができなくなります。

では、私の質問ですが、open withWindowsが使用している関数のようなものを実装し、特定の種類のファイルに対して可能なすべてのエディターを返す方法はありますか?ファイルの拡張子は常になります.ini

4

4 に答える 4

1

私が見る限り、環境が指している場所にultraedit.exeが見つからない可能性があるため、Runtime.exec()開くことができません。ultraedit.exePATH

ultraedit.exeの場所を検出し、完全修飾パスで開く必要があります。これは機能するはずです。

于 2013-01-07T09:16:00.803 に答える
1

1 つのアプローチ (前提: クロスプラットフォームではなく、Windows のみ)からassocおよびftypeコマンドを使用cmd.exeして、特定のファイル タイプに関連付けられているアプリケーションを一覧表示することです。 Java アプリケーションでのファイル関連付けの利用も参照してください。

これは 2 段階のプロセスです。まず、 を介して拡張子 ( ) からファイル タイプ ( ) を取得しinifile、次に を介してファイル タイプに関連付けられた実行可能ファイルを検索します。.iniassocftype

C:> cmd.exe /c assoc .ini
.ini=inifile

C:> cmd.exe /c ftype inifile
inifile=%SystemRoot%\system32\NOTEPAD.EXE %1

これらのコマンドを起動Runtime.getRuntime().exec()して出力ストリームをキャッチし、関連するプログラムを取得できます。

于 2013-01-07T09:19:11.530 に答える
0

少なくとも XP では (現時点では Win 7 を確認する方法がありません)、インストールされているアプリケーションのパスはレジストリの次の場所にあります。

\\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\<program name>

より簡単な (そして移植可能な) 解決策として、エディターと実行可能ファイルへのフル パスをリストした構成ファイルを追加します。

于 2013-01-07T09:18:49.847 に答える
0

可能であれば、Desktop#openを試すことができます

関連するアプリケーションを起動してファイルを開きます。指定されたファイルがディレクトリの場合、現在のプラットフォームのファイル マネージャが起動されて開きます。

于 2013-01-07T09:33:19.070 に答える