你如何确定使用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什么的