Я хочу проверить выпуск Windows (основной или домашний или профессиональный или бизнес или другой) на Java.
Как это сделать?
Я хочу проверить выпуск Windows (основной или домашний или профессиональный или бизнес или другой) на Java.
Как это сделать?
Вы всегда можете использовать 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());
}
}
}
Вы можете использовать библиотеку Apache Commons
Класс SystemUtils предоставляет несколько методов для определения такой информации.
Вы можете получить много информации о вашей системе, задав 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
кажется вашим лучшим выбором
Результаты от 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
.
Реорганизованный Hunter McMillen answer будет более эффективным и расширяемым.
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;
}
}
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
Для получения дополнительной информации (наиболее важные системные свойства):