<AI>
JavaプログラムからManjaro LinuxにVS Code(Visual Studio Code)がインストールされているかを判定するには、
java.io.Fileクラスで特定のパス(実行ファイルや .desktop ファイル)の存在を確認するか、
ProcessBuilderを使ってコマンドの有無をチェックします。

判定方法の主なアプローチ
パスの直接確認: /usr/bin/code やユーザーのホームディレクトリ内にあるバイナリ、またはアプリケーションショートカットファイルの有無を調べる。

which コマンドの実行: 端末の環境変数(PATH)に code コマンドが存在するか確認する。

パッケージマネージャーの確認: Manjaro(Arch系)のパッケージ管理システムである pacman を用いて、インストール済みパッケージを問い合わせる。

実装例(Javaコード)
1. ファイルパスの存在を確認する方法(推奨・高速)

標準的なインストール先や、Flatpakなどのパスを直接探索します。

java
import java.io.File;

public class VscodeChecker {
    public static boolean isVscodeInstalled() {
        String userHome = System.getProperty("user.home");

        // 探すパスのリスト
        String[] paths = {
            "/usr/bin/code",                         // 公式パッケージ等
            "/usr/local/bin/code",
            userHome + "/.local/bin/code",           // ユーザー個別
            "/var/lib/flatpak/exports/share/applications/com.visualstudio.code.desktop", // Flatpak版
            userHome + "/.local/share/applications/com.visualstudio.code.desktop"
        };

        for (String path : paths) {
            if (new File(path).exists()) {
                return true;
            }
        }
        return false;
    }
}

2. which コマンドを使用する方法

環境変数 PATH が通っているかを手軽に判定できます。

java
import java.io.IOException;

public class VscodeChecker {
    public static boolean isVscodeInstalled() {
        try {
            Process process = new ProcessBuilder("which", "code").start();
            int exitCode = process.waitFor();
            return (exitCode == 0); // 0であればコマンドが存在する
        } catch (IOException | InterruptedException e) {
            return false;
        }
    }
}

コードは注意してご使用ください。

3. pacman コマンドを使用する方法

Manjaroのシステムパッケージ(code または visual-studio-code-bin など)としてインストールされているか厳密に調べる場合。

javaimport java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class VscodeChecker {
    public static boolean isVscodeInstalled() {
        try {
            // -Q コマンドでインストール済みパッケージを検索
            Process process = new ProcessBuilder("pacman", "-Q", "visual-studio-code-bin").start();
            int exitCode = process.waitFor();
            if (exitCode == 0) return true;

            // 別名パッケージの可能性も考慮する場合
            Process process2 = new ProcessBuilder("pacman", "-Q", "code").start();
            return (process2.waitFor() == 0);

        } catch (IOException | InterruptedException e) {
            return false;
        }
    }
}

もし判定の際に Flatpak版 や Snap版、あるいは AUR(Arch User Repository)版など特定の導入方法に絞って検出したいご予定はありますか?
より詳細な要件があればお聞かせください