quarta-feira, 14 de dezembro de 2016

Java: Verificando se o Sistema Operacional é 32 ou 64 bits no Windows

Outro caso que se assemelha ao anterior é verificar se o sistema operacional é 32 ou 64 bits. O Java possui um comando que é o "System.getProperty("os.arch")", mas existe um problema nele: ele verifica se a máquina virtual é 32 ou 64bits, mas não o sistema em si. O que isso significa? Significa que eu posso ter um sistema 64 bits rodando um JVM de 32 bits, e nesse caso, o comando vai retornar 32 bits.
Mas como posso resolver esse problema? Novamente, vamos requisitar na linha de comando do Windows. Vejo o código abaixo:

public String whatOSArchitecture() throws IOException{
    ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c","wmic OS get OSArchitecture");
    builder.redirectErrorStream(true);
    Process p = builder.start();
    InputStream is = p.getInputStream();
    BufferedReader br = null;
    StringBuilder sb = new StringBuilder();
    String line;
    try {
        br = new BufferedReader(new InputStreamReader(is));
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
    } finally {
        if (br != null) {
            br.close();
        }
    }
    return sb.toString();
}

Praticamente é o mesmo de ontem, a diferença é que invocamos o comando "wmic OS get OSArchitecture". O programa "wmic" é um programa de gerenciamento do Windows para linha de comando, e naturalmente, possui os comandos que precisamos, neste caso: seria o "OS get OSArchitecture", que vai nos retornar a arquitetura do sistema.
O restante é o básico: executa o comando, leia o retorno e retorna o que você deseja. Dá até para fazer um método com o que tem em comum com o nosso artigo anterior. 

Nenhum comentário:

Postar um comentário