Как проверить версию Windows на Java? - PullRequest
10 голосов
/ 24 мая 2011

Я хочу проверить версию Windows (Basic, Home, Professional, Business или др.) На Java.

Как это сделать?

Ответы [ 6 ]

7 голосов
/ 24 мая 2011

Вы всегда можете использовать Java для вызова команды Windows 'systeminfo', а затем проанализировать результат, я не могу найти способ сделать это изначально в Java.

 import java.io.*;

   public class GetWindowsEditionTest
   {
      public static void main(String[] args)
      {
         Runtime rt; 
         Process pr; 
         BufferedReader in;
         String line = "";
         String sysInfo = "";
         String edition = "";
         String fullOSName = "";
         final String   SEARCH_TERM = "OS Name:";
         final String[] EDITIONS = { "Basic", "Home", 
                                     "Professional", "Enterprise" };

         try
         {
            rt = Runtime.getRuntime();
            pr = rt.exec("SYSTEMINFO");
            in = new BufferedReader(new InputStreamReader(pr.getInputStream()));

            //add all the lines into a variable
            while((line=in.readLine()) != null)
            {
               if(line.contains(SEARCH_TERM)) //found the OS you are using
               {
                //extract the full os name
                  fullOSName = line.substring(line.lastIndexOf(SEARCH_TERM) 
                  + SEARCH_TERM.length(), line.length()-1);
                  break;
               } 
            }

            //extract the edition of windows you are using
            for(String s : EDITIONS)
            {
               if(fullOSName.trim().contains(s))
               {
                  edition = s;
               }
            }

            System.out.println("The edition of Windows you are using is " 
                               + edition); 

         }
            catch(IOException ioe)      
            {   
               System.err.println(ioe.getMessage());
            }
      }
   }
5 голосов
/ 24 мая 2011

Вы можете использовать Apache Commons Library

Класс SystemUtils предоставляет несколько методов для определения такой информации.

4 голосов
/ 24 мая 2011

Вы можете получить много информации о вашей Системе, спросив JVM о ее Системных свойствах:

import java.util.*;
public class SysProperties {
   public static void main(String[] a) {
      Properties sysProps = System.getProperties();
      sysProps.list(System.out);
   }
}

подробнее здесь: http://www.herongyang.com/Java/System-JVM-and-OS-System-Properties.html

РЕДАКТИРОВАТЬ: свойство os.name, кажется, ваш лучший выбор

1 голос
/ 04 июля 2014

Результаты System.getProperty("os.name") различаются для разных виртуальных машин Java (даже для Sun / Oracle):

A JRE вернет Windows 8 для машины с Windows 8. Для той же системы Windows NT (unknown) возвращается при запуске той же программы с JDK.

System.getProperty("os.version") кажется более надежным в этом. Для Windows 7 возвращается 6.1 и 6.2 для Windows 8.

0 голосов
/ 10 августа 2017
public static void main(String[] args) {
    System.out.println("os.name: " + System.getProperty("os.name"));
    System.out.println("os.version: " + System.getProperty("os.version"));
    System.out.println("os.arch: " + System.getProperty("os.arch"));
}

вывод:

os.name: Windows 8.1
os.version: 6.3
os.arch: amd64

Для получения дополнительной информации (наиболее важные системные свойства):

0 голосов
/ 04 сентября 2015

Реорганизованный ответ Хантера Макмиллена , чтобы быть более эффективным и расширяемым.

import java.io.*;

public class WindowsUtils {
    private static final String[] EDITIONS = {
        "Basic", "Home", "Professional", "Enterprise"
    };

    public static void main(String[] args) {
        System.out.printf("The edition of Windows you are using is: %s%n", getEdition());
    }

    public static String findSysInfo(String term) {
        try {
            Runtime rt = Runtime.getRuntime();
            Process pr = rt.exec("CMD /C SYSTEMINFO | FINDSTR /B /C:\"" + term + "\"");
            BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
            return in.readLine();
        } catch (IOException e) {
            System.err.println(e.getMessage());
        }
        return "";
    }

    public static String getEdition() {
        String osName = findSysInfo("OS Name:");
        if (!osName.isEmpty()) {
            for (String edition : EDITIONS) {
                if (osName.contains(edition)) {
                    return edition;
                }
            }
        }
        return null;
    }
}
...