উত্তর:
তুমি ব্যবহার করতে পার:
System.getProperty("os.name")
পিএস আপনি এই কোডটি দরকারী খুঁজে পেতে পারেন:
class ShowProperties {
public static void main(String[] args) {
System.getProperties().list(System.out);
}
}
এটি যা করে তা হ'ল আপনার জাভা বাস্তবায়ন দ্বারা সরবরাহিত সমস্ত সম্পত্তি মুদ্রণ করা। এটি আপনাকে সম্পত্তিগুলির মাধ্যমে আপনার জাভা পরিবেশ সম্পর্কে কী জানতে পারে তার একটি ধারণা দেবে। :-)
অন্যান্য উত্তরে যেমন নির্দেশিত হয়েছে, System.getProperty কাঁচা ডেটা সরবরাহ করে। যাইহোক, অ্যাপাচি কমন্স ল্যাং উপাদানটি জাভা.এলং.সিসটেমের জন্য হ্যান্ড্পার বৈশিষ্ট্যগুলির মতো একটি মোড়ক সরবরাহ করে SystemUtils.IS_OS_WINDOWS
, যেমন অনেকটা পূর্বোক্ত সুইংক্স ওএস ব্যবহারের মতো।
অক্টোবর ২০০৮:
আমি এটি একটি স্ট্যাটিক ভেরিয়েবলে ক্যাশে করার পরামর্শ দেব:
public static final class OsUtils
{
private static String OS = null;
public static String getOsName()
{
if(OS == null) { OS = System.getProperty("os.name"); }
return OS;
}
public static boolean isWindows()
{
return getOsName().startsWith("Windows");
}
public static boolean isUnix() // and so on
}
এইভাবে, প্রতিবার ওসের জন্য জিজ্ঞাসা করার পরে, আপনি আপনার আবেদনের জীবদ্দশায় সম্পত্তি একবারে পান না do
ফেব্রুয়ারী 2016: 7+ বছর পরে:
উইন্ডোজ 10 এর সাথে একটি বাগ রয়েছে (যা মূল উত্তরের সময় উপস্থিত ছিল না)। উইন্ডোজ 10 এর জন্য
" জাভার" OS.name " দেখুন ? "
isWindows
, isUnix
স্ট্রিং তুলনা সময় এছাড়াও সংরক্ষণ পথ, ইত্যাদি যে আপনি।
উপরের উত্তরে কিছু লিঙ্ক ভাঙা মনে হচ্ছে। আমি নীচের কোডটিতে বর্তমান উত্স কোডে পয়েন্টার যুক্ত করেছি এবং উত্তর হিসাবে এনাম দিয়ে চেকটি পরিচালনা করার জন্য একটি পদ্ধতির প্রস্তাব দিচ্ছি যাতে ফলাফলটি মূল্যায়ন করার সময় একটি সুইচ বিবৃতি ব্যবহার করা যেতে পারে:
OsCheck.OSType ostype=OsCheck.getOperatingSystemType();
switch (ostype) {
case Windows: break;
case MacOS: break;
case Linux: break;
case Other: break;
}
সহায়ক শ্রেণি হ'ল:
/**
* helper class to check the operating system this Java VM runs in
*
* please keep the notes below as a pseudo-license
*
* http://stackoverflow.com/questions/228477/how-do-i-programmatically-determine-operating-system-in-java
* compare to http://svn.terracotta.org/svn/tc/dso/tags/2.6.4/code/base/common/src/com/tc/util/runtime/Os.java
* http://www.docjar.com/html/api/org/apache/commons/lang/SystemUtils.java.html
*/
import java.util.Locale;
public static final class OsCheck {
/**
* types of Operating Systems
*/
public enum OSType {
Windows, MacOS, Linux, Other
};
// cached result of OS detection
protected static OSType detectedOS;
/**
* detect the operating system from the os.name System property and cache
* the result
*
* @returns - the operating system detected
*/
public static OSType getOperatingSystemType() {
if (detectedOS == null) {
String OS = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH);
if ((OS.indexOf("mac") >= 0) || (OS.indexOf("darwin") >= 0)) {
detectedOS = OSType.MacOS;
} else if (OS.indexOf("win") >= 0) {
detectedOS = OSType.Windows;
} else if (OS.indexOf("nux") >= 0) {
detectedOS = OSType.Linux;
} else {
detectedOS = OSType.Other;
}
}
return detectedOS;
}
}
নিম্নলিখিত জাভাএফএক্স ক্লাসে বর্তমান ওএস (isWindows (), isLinux () ...) নির্ধারণের জন্য স্থির পদ্ধতি রয়েছে:
উদাহরণ:
if (PlatformUtil.isWindows()){
...
}
টি এল; ডিআর
OS ব্যবহার অ্যাক্সেস জন্য: System.getProperty("os.name")
।
তবে কেন কোনও ইউটিলিটি ক্লাস তৈরি করবেন না, এটিকে পুনরায় ব্যবহারযোগ্য করে তুলুন! এবং সম্ভবত একাধিক কলগুলিতে আরও দ্রুত। পরিষ্কার, পরিষ্কার, দ্রুত!
এই জাতীয় ইউটিলিটি ফাংশনের জন্য একটি ইউটিলি ক্লাস তৈরি করুন। তারপরে প্রতিটি অপারেটিং সিস্টেমের জন্য পাবলিক এনাম তৈরি করুন।
public class Util {
public enum OS {
WINDOWS, LINUX, MAC, SOLARIS
};// Operating systems.
private static OS os = null;
public static OS getOS() {
if (os == null) {
String operSys = System.getProperty("os.name").toLowerCase();
if (operSys.contains("win")) {
os = OS.WINDOWS;
} else if (operSys.contains("nix") || operSys.contains("nux")
|| operSys.contains("aix")) {
os = OS.LINUX;
} else if (operSys.contains("mac")) {
os = OS.MAC;
} else if (operSys.contains("sunos")) {
os = OS.SOLARIS;
}
}
return os;
}
}
এখন, আপনি সহজেই যেকোন ক্লাস থেকে ক্লাসটি নিম্নরূপে আহ্বান করতে পারেন, (পিএস যেহেতু আমরা ওএস ভেরিয়েবলটিকে স্ট্যাটিক হিসাবে ঘোষণা করেছি, এটি সিস্টেমের ধরণ সনাক্ত করতে একবার সময় ব্যয় করবে, তারপরে এটি আপনার অ্যাপ্লিকেশন বন্ধ না হওয়া অবধি ব্যবহার করা যেতে পারে।)
switch (Util.getOS()) {
case WINDOWS:
//do windows stuff
break;
case LINUX:
আর এটাই!
আপনি যা অর্জন করার চেষ্টা করছেন তার একটি ছোট উদাহরণ সম্ভবত class
নীচের জিনিসগুলির সাথে একটি অনুরূপ হতে পারে:
import java.util.Locale;
public class OperatingSystem
{
private static String OS = System.getProperty("os.name", "unknown").toLowerCase(Locale.ROOT);
public static boolean isWindows()
{
return OS.contains("win");
}
public static boolean isMac()
{
return OS.contains("mac");
}
public static boolean isUnix()
{
return OS.contains("nux");
}
}
এই নির্দিষ্ট প্রয়োগটি বেশ নির্ভরযোগ্য এবং সর্বজনীনভাবে প্রযোজ্য। এটি কেবল আপনার class
পছন্দ মতো অনুলিপি করুন এবং আটকান ।
যদি আপনি আগ্রহী হন যে কোনও ওপেন সোর্স প্রকল্পটি কীভাবে এরকম স্টাফগুলি করে, আপনি এখানে টেরাকোটার ক্লাস (ওস.জাভা) যা এই জঞ্জালটি পরিচালনা করে তা পরীক্ষা করে দেখতে পারেন:
এবং আপনি এখানে জেভিএম সংস্করণগুলি (ভিএম.জাভা এবং ভিএম ভার্সন.জাভা) হ্যান্ডেল করার জন্য একই ধরণের শ্রেণি দেখতে পারেন:
toLowerCase
এই প্রকল্পটি https://github.com/RishiGapt12/serial-communication-manager থেকে নেওয়া
String osName = System.getProperty("os.name");
String osNameMatch = osName.toLowerCase();
if(osNameMatch.contains("linux")) {
osType = OS_LINUX;
}else if(osNameMatch.contains("windows")) {
osType = OS_WINDOWS;
}else if(osNameMatch.contains("solaris") || osNameMatch.contains("sunos")) {
osType = OS_SOLARIS;
}else if(osNameMatch.contains("mac os") || osNameMatch.contains("macos") || osNameMatch.contains("darwin")) {
osType = OS_MAC_OS_X;
}else {
}
নীচের কোডগুলিতে সিস্টেম এপিআই থেকে আপনি যে মানগুলি পেতে পারেন সেগুলি দেখায়, এই API এর মাধ্যমে এই সমস্ত জিনিস আপনি পেতে পারেন।
public class App {
public static void main( String[] args ) {
//Operating system name
System.out.println(System.getProperty("os.name"));
//Operating system version
System.out.println(System.getProperty("os.version"));
//Path separator character used in java.class.path
System.out.println(System.getProperty("path.separator"));
//User working directory
System.out.println(System.getProperty("user.dir"));
//User home directory
System.out.println(System.getProperty("user.home"));
//User account name
System.out.println(System.getProperty("user.name"));
//Operating system architecture
System.out.println(System.getProperty("os.arch"));
//Sequence used by operating system to separate lines in text files
System.out.println(System.getProperty("line.separator"));
System.out.println(System.getProperty("java.version")); //JRE version number
System.out.println(System.getProperty("java.vendor.url")); //JRE vendor URL
System.out.println(System.getProperty("java.vendor")); //JRE vendor name
System.out.println(System.getProperty("java.home")); //Installation directory for Java Runtime Environment (JRE)
System.out.println(System.getProperty("java.class.path"));
System.out.println(System.getProperty("file.separator"));
}
}
উত্তর: -
Windows 7
6.1
;
C:\Users\user\Documents\workspace-eclipse\JavaExample
C:\Users\user
user
amd64
1.7.0_71
http://java.oracle.com/
Oracle Corporation
C:\Program Files\Java\jre7
C:\Users\user\Documents\workspace-Eclipse\JavaExample\target\classes
\
আমি দেখতে পেলাম যে সুইংক্সের ওএস ইউটিসগুলি কাজটি করে।
আমি মনে করি নিম্নলিখিতগুলি আরও কম লাইনে বিস্তৃত কভারেজ দিতে পারে
import org.apache.commons.exec.OS;
if (OS.isFamilyWindows()){
//load some property
}
else if (OS.isFamilyUnix()){
//load some other property
}
আরও বিশদ এখানে: https://commons.apache.org/proper/commons-exec/apidocs/org/apache/commons/exec/OS.html
String osName = System.getProperty("os.name");
System.out.println("Operating system " + osName);
আপনি কেবলমাত্র sun.awt.OSInfo # getOSType () পদ্ধতি ব্যবহার করতে পারেন
আপনি যদি সুরক্ষা সংবেদনশীল পরিবেশে কাজ করছেন, তবে দয়া করে এটি পড়ুন।
System#getProperty(String)
সাব্রুটিনের মাধ্যমে প্রাপ্ত কোনও সম্পত্তির উপর বিশ্বাস করা থেকে বিরত থাকুন ! প্রকৃতপক্ষে, প্রায় প্রতিটি সম্পত্তি সহ os.arch
, os.name
এবং os.version
আপনি যেমনটি আশা করতে পারেন তেমন পাঠ্য নয় - পরিবর্তে, তারা আসলে বেশ বিপরীত।
প্রথমত, System#setProperty(String, String)
সাবরোটিনকে ডাকার পর্যাপ্ত অনুমতি সহ যে কোনও কোড ইচ্ছামত প্রত্যাবর্তিত আক্ষরিক পরিবর্তন করতে পারে। যাইহোক, যে অগত্যা প্রাথমিক ইস্যু এখানে হিসাবে এটি একটি তথাকথিত ব্যবহারের মাধ্যমে সমাধান করা যেতে পারে SecurityManager
, ওভার বেশী বিস্তারিত বর্ণনা অনুযায়ী এখানে ।
আসল সমস্যাটি হ'ল যে কোনও ব্যবহারকারী প্রশ্নযুক্ত অবস্থায় চলাকালীন এই বৈশিষ্ট্যগুলি সম্পাদনা করতে সক্ষম হন JAR
। এর অর্থ এই বৈশিষ্ট্যগুলি প্রকৃতপক্ষে সঠিক কিনা তা নির্ধারণের কোনও উপায় নেই । এ কারণে, ছড়িয়ে পড়ার চেষ্টা এবং এড়ানোর জন্য কয়েকটি অতিরিক্ত চেক এখানে দেওয়া হয়েছে:
// The first thing we're able to do is to query the filesystem.
switch (java.io.File.separator)
{
case "/":
// Windows is a potential candidate.
break;
case "\\":
// And here it could really be anything else.
break;
default:
// There's probably something really wrong here by now.
break;
}
অপর একটি ভাল ধারণা অপারেটিং সিস্টেম নির্দিষ্ট ডিরেক্টরি উপস্থিতি পরীক্ষা করা হয়। আপনি যে পদ্ধতি গ্রহণ করতে পারেন, মনে রাখবেন যে জাভা ভাষা ক্রস প্ল্যাটফর্ম হিসাবে অভিযুক্ত ind তাহলে, আপনি কেন একই চেষ্টা করবেন না?
আমি ওল্ফগ্যাংয়ের উত্তর পছন্দ করলাম, কারণ আমি বিশ্বাস করি যে এই জাতীয় জিনিসগুলি কনস্টেট হওয়া উচিত ...
তাই আমি নিজের জন্য এটি কিছুটা পুনরায় চাপিয়ে দিয়েছি এবং এটিকে ভাগ করে নেওয়ার চিন্তা করেছি :)
/**
* types of Operating Systems
*
* please keep the note below as a pseudo-license
*
* helper class to check the operating system this Java VM runs in
* http://stackoverflow.com/questions/228477/how-do-i-programmatically-determine-operating-system-in-java
* compare to http://svn.terracotta.org/svn/tc/dso/tags/2.6.4/code/base/common/src/com/tc/util/runtime/Os.java
* http://www.docjar.com/html/api/org/apache/commons/lang/SystemUtils.java.html
*/
public enum OSType {
MacOS("mac", "darwin"),
Windows("win"),
Linux("nux"),
Other("generic");
private static OSType detectedOS;
private final String[] keys;
private OSType(String... keys) {
this.keys = keys;
}
private boolean match(String osKey) {
for (int i = 0; i < keys.length; i++) {
if (osKey.indexOf(keys[i]) != -1)
return true;
}
return false;
}
public static OSType getOS_Type() {
if (detectedOS == null)
detectedOS = getOperatingSystemType(System.getProperty("os.name", Other.keys[0]).toLowerCase());
return detectedOS;
}
private static OSType getOperatingSystemType(String osKey) {
for (OSType osType : values()) {
if (osType.match(osKey))
return osType;
}
return Other;
}
}
সিস্টেমের ওএস প্রকার, নাম, জাভা তথ্য ইত্যাদির সমস্ত তথ্য প্রদর্শন করার জন্য এই কোড।
public static void main(String[] args) {
// TODO Auto-generated method stub
Properties pro = System.getProperties();
for(Object obj : pro.keySet()){
System.out.println(" System "+(String)obj+" : "+System.getProperty((String)obj));
}
}
Com.sun.jna.প্ল্যাটফর্ম ক্লাসে আপনি যেমন দরকারী স্ট্যাটিক পদ্ধতি খুঁজে পেতে পারেন
Platform.isWindows();
Platform.is64Bit();
Platform.isIntel();
Platform.isARM();
এবং আরো অনেক কিছু.
আপনি যদি মাভেন ব্যবহার করেন তবে নির্ভরতা যুক্ত করুন
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.2.0</version>
</dependency>
অন্যথায় কেবল jna গ্রন্থাগার জার ফাইলটি (উদাহরণস্বরূপ jna-5.2.0.jar) সন্ধান করুন এবং এটি ক্লাসপথে যুক্ত করুন।
Windows 10
এবং এখনওos.name
আমাকে দেয়Windows 8.1
। কেন এমন? এটা কোথা থেকে আসছে?