你如何确定使用Java的32位或64位体系结构的Windows?

你如何确定使用Java的32位或64位体系结构的Windows?

谢谢。

请注意, os.arch属性只会给你JRE的体系结构,而不是底层的os。

如果您在64位系统上安装32位jre,则System.getProperty("os.arch")将返回x86

为了实际确定底层架构,您需要编写一些本地代码。 看到这个职位的更多信息(和一个链接到示例本地代码)

我不完全相信读os.arch系统variables。 如果用户在64位系统上运行64位JVM,则它可以正常工作。 如果用户在64位系统上运行32位JVM,则不起作用。

以下代码适用于正确检测Windows 64位操作系统。 在Windows 64位系统上,将设置环境variables“Programfiles(x86)”。 它不会被设置在一个32位的系统,Java将读取它为null。

 boolean is64bit = false; if (System.getProperty("os.name").contains("Windows")) { is64bit = (System.getenv("ProgramFiles(x86)") != null); } else { is64bit = (System.getProperty("os.arch").indexOf("64") != -1); } 

对于其他操作系统,如Linux或Solaris或Mac,我们也可能会看到这个问题。 所以这不是一个完整的解决scheme。 对于Mac,您可能是安全的,因为苹果lockingJVM以匹配操作系统。 但是Linux和Solaris等,他们仍然可以在他们的64位系统上使用32位的JVM。 所以请谨慎使用。

我使用命令提示符(命令 – > wmic OS获取OSArchitecture)来获取操作系统体系结构。 以下程序有助于获得所有必需的参数:

 import java.io.*; public class User { public static void main(String[] args) throws Exception { System.out.println("OS --> "+System.getProperty("os.name")); //OS Name such as Windows/Linux System.out.println("JRE Architecture --> "+System.getProperty("sun.arch.data.model")+" bit."); // JRE architecture ie 64 bit or 32 bit JRE ProcessBuilder builder = new ProcessBuilder( "cmd.exe", "/c","wmic OS get OSArchitecture"); builder.redirectErrorStream(true); Process p = builder.start(); String result = getStringFromInputStream(p.getInputStream()); if(result.contains("64")) System.out.println("OS Architecture --> is 64 bit"); //The OS Architecture else System.out.println("OS Architecture --> is 32 bit"); } private static String getStringFromInputStream(InputStream is) { BufferedReader br = null; StringBuilder sb = new StringBuilder(); String line; try { br = new BufferedReader(new InputStreamReader(is)); while ((line = br.readLine()) != null) { sb.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return sb.toString(); } } 

你可以试试这个代码,我认为最好是检测JVM的模型

 boolean is64bit = System.getProperty("sun.arch.data.model").contains("64"); 

也许这不是最好的方式,但它的工作原理。

我所做的就是获取Windows为Program Files x86文件夹configuration的“Enviroment Variable”。 我的意思是Windows x64有文件夹(Program Files x86),而x86则没有。 因为用户可以改变Enviroment Variables的程序文件path,或者他/她可以在C:\中创build一个目录“Program Files(x86)”,我将不会使用文件夹的检测,而是使用“环境path”程序文件(x86)“与Windowsregistry中的variables。

 public class getSystemInfo { static void suckOsInfo(){ // Get OS Name (Like: Windows 7, Windows 8, Windows XP, etc.) String osVersion = System.getProperty("os.name"); System.out.print(osVersion); String pFilesX86 = System.getenv("ProgramFiles(X86)"); if (pFilesX86 !=(null)){ // Put here the code to execute when Windows x64 are Detected System.out.println(" 64bit"); } else{ // Put here the code to execute when Windows x32 are Detected System.out.println(" 32bit"); } System.out.println("Now getSystemInfo class will EXIT"); System.exit(0); } } 

(仅适用于Windows)检查是否存在C:\ Windows \ SysWOW64。 如果该目录存在,它是一个64位的过程。 否则,这是一个32位的过程。

 System.getProperty("os.arch"); 

您可以使用系统属性中的os.arch属性来查找。

 Properties pr = System.getProperties(); System.out.println(pr.getProperty("os.arch")); 

如果你在32位,它应该显示i386什么的