Java Tutorial/Development/OS

Материал из Java эксперт
Перейти к: навигация, поиск

Class representing a standard operating system platform, WIN, MAC, or POSIX.

   <source lang="java">

/*

*  OS.java
*  2007-04-14
*/

//cb.aloe.util; import java.io.File; import java.util.ArrayList; /**

* Class representing a standard operating system platform, WIN, MAC, or POSIX.
* 
* @author Christopher Bach
*/

public final class OS {

 public static final OS WIN = new OS("WIN");
 public static final OS MAC = new OS("MAC");
 public static final OS POSIX = new OS("POSIX");
 private String ourOS = "";
 /**
  * Private constructor to avert instantiation.
  */
 private OS(String os) {
   ourOS = os;
 }
 /**
  * Returns a String representing this OS object.
  */
 public String toString() {
   return ourOS;
 }
 /**
  * Returns the first readable and writable application data folder appropriate
  * to this OS.
  */
 public static File getAppDataFolder() {
   File[] folders = listAppDataFolders();
   for (int i = 0; i < folders.length; i++) {
     File folder = folders[i];
     if (folder.canRead() && folder.canWrite())
       return folder;
   }
   return null;
 }
 /**
  * Returns the first readable and writable user data folder appropriate to
  * this OS.
  */
 public static File getUserDataFolder() {
   File[] folders = listUserDataFolders();
   for (int i = 0; i < folders.length; i++) {
     File folder = folders[i];
     if (folder.canRead() && folder.canWrite())
       return folder;
   }
   return null;
 }
 /**
  * Returns a list of the preferred locations for storing application- specific
  * data in descending order.
  */
 public static File[] listAppDataFolders() {
   String home = System.getProperty("user.home");
   ArrayList folders = new ArrayList();
   if (isWinNT()) // NT/2000/XP
   {
     // C:\Documents and Settings\All Users\Application Data
     // Surmise that the "All Users" folder will be a child of the
     // parent of the current user"s home folder:
     File folder = new File(home).getParentFile();
     folders.add(new File(folder, "All Users\\Application Data"));
   }
   else if (isWin9X()) // 95/98/ME
   {
     // C:\Windows
     folders.add(new File(home));
   }
   else if (isVista()) {
     // C:\ProgramData
     File folder = new File(home).getParentFile().getParentFile();
     folders.add(new File(folder, "ProgramData"));
     // C:\Users\Public\AppData
     folder = new File(home).getParentFile();
     folders.add(new File(folder, "Public\\AppData"));
   }
   else if (isMac()) {
     folders.add(new File("/Library/Application Support"));
   }
   else {
     folders.add(new File("/var/local"));
     folders.add(new File("/var"));
   }
   // folders.addAll(Arrays.asList(listUserDataFolders()));
   File[] files = new File[folders.size()];
   return (File[]) folders.toArray(files);
 }
 /**
  * Returns a list of the preferred locations for storing user- specific data
  * in descending order.
  */
 public static File[] listUserDataFolders() {
   String home = System.getProperty("user.home");
   ArrayList folders = new ArrayList();
   if (isWinNT()) {
     folders.add(new File(home + "\\Application Data"));
     folders.add(new File(home + "\\Local Settings\\Application Data"));
   }
   else if (isVista()) {
     folders.add(new File(home + "\\AppData"));
     folders.add(new File(home + "\\AppData\\Local"));
   }
   else if (isMac()) {
     folders.add(new File(home + "/Library/Application Support"));
   }
   folders.add(new File(home));
   File[] files = new File[folders.size()];
   return (File[]) folders.toArray(files);
 }
 /**
  * Returns the name of the current operating system platform as listed in the
  * System properties.
  */
 public static final String getOSName() {
   return System.getProperty("os.name");
 }
 /**
  * Returns the OS representing the current operating system platform.
  */
 public static final OS getOS() {
   String os = System.getProperty("os.name").toLowerCase();
   if (os.indexOf("windows") >= 0)
     return WIN;
   else if (os.indexOf("mac os") >= 0)
     return MAC;
   else
     return POSIX;
 }
 /**
  * Returns whether or not the current operating system is a Microsoft Windows
  * platform.
  */
 public static final boolean isWindows() {
   return getOS() == WIN;
 }
 /**
  * Returns whether or not the current operating system is a Microsoft Windows
  * 9X platform (Windows 95/98/ME).
  */
 public static boolean isWin9X() {
   if (getOS() != WIN)
     return false;
   String os = getOSName();
   if (os.indexOf("95") >= 0 || os.indexOf("98") >= 0 || os.indexOf("me") >= 0)
     return true;
   return false;
 }
 /**
  * Returns whether or not the current operating system is a Microsoft Windows
  * NT platform (Windows NT/2000/2003/XP).
  */
 public static boolean isWinNT() {
   if (getOS() != WIN)
     return false;
   String os = getOSName();
   if (os.indexOf("NT") >= 0 || os.indexOf("2000") >= 0 || os.indexOf("2003") >= 0
       || os.indexOf("XP") >= 0)
     return true;
   return false;
 }
 /**
  * Returns whether or not the current operating system is a Microsoft Windows
  * Vista platform.
  */
 public static boolean isVista() {
   if (getOS() != WIN)
     return false;
   String os = getOSName();
   return (os.indexOf("Vista") >= 0);
 }
 /**
  * Returns whether or not the current operating system is the Apple Macintosh
  * OS X platform.
  */
 public static final boolean isMac() {
   return getOS() == MAC;
 }
 /**
  * Returns whether or not the current operating system is a Posix-compatible
  * platform (Unix, Linux, Solaris, etc).
  */
 public static final boolean isPosix() {
   return getOS() == POSIX;
 }

}</source>





Class to help determining the OS

   <source lang="java">

/*

* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
* 
*      http://www.apache.org/licenses/LICENSE-2.0
* 
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; /**

* Class to help determining the OS.
*
* @author 
* @version $Revision: 480428 $ $Date: 2006-11-29 07:15:24 +0100 (Mi, 29 Nov 2006) $
*/
final class OsFamily

{

   private final String name;
   private final OsFamily[] families;
   OsFamily(final String name)
   {
       this.name = name;
       families = new OsFamily[0];
   }
   OsFamily(final String name, final OsFamily[] families)
   {
       this.name = name;
       this.families = families;
   }
   /**
    * Returns the name of this family.
    */
   public String getName()
   {
       return name;
   }
   /**
    * Returns the OS families that this family belongs to.
    */
   public OsFamily[] getFamilies()
   {
       return families;
   }

}</source>





Condition that tests the OS type.

   <source lang="java">

/*

* Licensed to the Apache Software Foundation (ASF) under one or more
*  contributor license agreements.  See the NOTICE file distributed with
*  this work for additional information regarding copyright ownership.
*  The ASF licenses this file to You under the Apache License, Version 2.0
*  (the "License"); you may not use this file except in compliance with
*  the License.  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*
*/

import java.util.Locale; /**

* Condition that tests the OS type.
*/

public final class OS {

   private static final String FAMILY_OS_400 = "os/400";
   private static final String FAMILY_Z_OS = "z/os";
   private static final String FAMILY_WIN9X = "win9x";
   private static final String FAMILY_OPENVMS = "openvms";
   private static final String FAMILY_UNIX = "unix";
   private static final String FAMILY_TANDEM = "tandem";
   private static final String FAMILY_MAC = "mac";
   private static final String FAMILY_DOS = "dos";
   private static final String FAMILY_NETWARE = "netware";
   private static final String FAMILY_OS_2 = "os/2";
   private static final String FAMILY_WINDOWS = "windows";
   private static final String OS_NAME = System.getProperty("os.name")
           .toLowerCase(Locale.US);
   private static final String OS_ARCH = System.getProperty("os.arch")
           .toLowerCase(Locale.US);
   private static final String OS_VERSION = System.getProperty("os.version")
           .toLowerCase(Locale.US);
   private static final String PATH_SEP = System.getProperty("path.separator");
   /**
    * Default constructor
    */
   private OS() {
   }
   /**
    * Determines if the OS on which Ant is executing matches the given OS
    * family. * Possible values:
*
    *
  • dos
  • *
  • mac
  • *
  • netware
  • *
  • os/2
  • *
  • tandem
  • *
  • unix
  • *
  • windows
  • *
  • win9x
  • *
  • z/os
  • *
  • os/400
  • *
    * 
    * @param family
    *            the family to check for
    * @return true if the OS matches
    */
   private static boolean isFamily(final String family) {
       return isOs(family, null, null, null);
   }
   public static boolean isFamilyDOS() {
       return isFamily(FAMILY_DOS);
   }
   public static boolean isFamilyMac() {
       return isFamily(FAMILY_MAC);
   }
   public static boolean isFamilyNetware() {
       return isFamily(FAMILY_NETWARE);
   }
   public static boolean isFamilyOS2() {
       return isFamily(FAMILY_OS_2);
   }
   public static boolean isFamilyTandem() {
       return isFamily(FAMILY_TANDEM);
   }
   public static boolean isFamilyUnix() {
       return isFamily(FAMILY_UNIX);
   }
   public static boolean isFamilyWindows() {
       return isFamily(FAMILY_WINDOWS);
   }
   public static boolean isFamilyWin9x() {
       return isFamily(FAMILY_WIN9X);
   }
   public static boolean isFamilyZOS() {
       return isFamily(FAMILY_Z_OS);
   }
   public static boolean isFamilyOS400() {
       return isFamily(FAMILY_OS_400);
   }
   public static boolean isFamilyOpenVms() {
       return isFamily(FAMILY_OPENVMS);
   }
   /**
    * Determines if the OS on which Ant is executing matches the given OS name.
    * 
    * @param name
    *            the OS name to check for
    * @return true if the OS matches
    */
   public static boolean isName(final String name) {
       return isOs(null, name, null, null);
   }
   /**
    * Determines if the OS on which Ant is executing matches the given OS
    * architecture.
    * 
    * @param arch
    *            the OS architecture to check for
    * @return true if the OS matches
    */
   public static boolean isArch(final String arch) {
       return isOs(null, null, arch, null);
   }
   /**
    * Determines if the OS on which Ant is executing matches the given OS
    * version.
    * 
    * @param version
    *            the OS version to check for
    * @return true if the OS matches
    */
   public static boolean isVersion(final String version) {
       return isOs(null, null, null, version);
   }
   /**
    * Determines if the OS on which Ant is executing matches the given OS
    * family, name, architecture and version
    * 
    * @param family
    *            The OS family
    * @param name
    *            The OS name
    * @param arch
    *            The OS architecture
    * @param version
    *            The OS version
    * @return true if the OS matches
    */
   public static boolean isOs(final String family, final String name,
           final String arch, final String version) {
       boolean retValue = false;
       if (family != null || name != null || arch != null || version != null) {
           boolean isFamily = true;
           boolean isName = true;
           boolean isArch = true;
           boolean isVersion = true;
           if (family != null) {
               if (family.equals(FAMILY_WINDOWS)) {
                   isFamily = OS_NAME.indexOf(FAMILY_WINDOWS) > -1;
               } else if (family.equals(FAMILY_OS_2)) {
                   isFamily = OS_NAME.indexOf(FAMILY_OS_2) > -1;
               } else if (family.equals(FAMILY_NETWARE)) {
                   isFamily = OS_NAME.indexOf(FAMILY_NETWARE) > -1;
               } else if (family.equals(FAMILY_DOS)) {
                   isFamily = PATH_SEP.equals(";")
                           && !isFamily(FAMILY_NETWARE);
               } else if (family.equals(FAMILY_MAC)) {
                   isFamily = OS_NAME.indexOf(FAMILY_MAC) > -1;
               } else if (family.equals(FAMILY_TANDEM)) {
                   isFamily = OS_NAME.indexOf("nonstop_kernel") > -1;
               } else if (family.equals(FAMILY_UNIX)) {
                   isFamily = PATH_SEP.equals(":")
                           && !isFamily(FAMILY_OPENVMS)
                           && (!isFamily(FAMILY_MAC) || OS_NAME.endsWith("x"));
               } else if (family.equals(FAMILY_WIN9X)) {
                   isFamily = isFamily(FAMILY_WINDOWS)
                           && (OS_NAME.indexOf("95") >= 0
                                   || OS_NAME.indexOf("98") >= 0
                                   || OS_NAME.indexOf("me") >= 0 || OS_NAME
                                   .indexOf("ce") >= 0);
               } else if (family.equals(FAMILY_Z_OS)) {
                   isFamily = OS_NAME.indexOf(FAMILY_Z_OS) > -1
                           || OS_NAME.indexOf("os/390") > -1;
               } else if (family.equals(FAMILY_OS_400)) {
                   isFamily = OS_NAME.indexOf(FAMILY_OS_400) > -1;
               } else if (family.equals(FAMILY_OPENVMS)) {
                   isFamily = OS_NAME.indexOf(FAMILY_OPENVMS) > -1;
               } else {
                   throw new IllegalArgumentException(
                           "Don\"t know how to detect os family \"" + family
                                   + "\"");
               }
           }
           if (name != null) {
               isName = name.equals(OS_NAME);
           }
           if (arch != null) {
               isArch = arch.equals(OS_ARCH);
           }
           if (version != null) {
               isVersion = version.equals(OS_VERSION);
           }
           retValue = isFamily && isName && isArch && isVersion;
       }
       return retValue;
   }

}</source>





Determine the JDK Version Number

   <source lang="java">

/** Determine the JDK Version Number

*
* There is a human readible JDK version number available as a Java property. The property name is called "java.version".
* Unfortunately it is complicated to parse it mechanically. A somewhat better choice is the Java property called
* "java.class.version". The property value can be converted to a floating pointer value. JDK 1.1 implies 45.3. JDK 1.2
* implies 46.0. JDK 1.3 implies 47.0. JDK 1.4 implies 48.0.
* 
* java.class.version property value
*
    *
  • JDK 1.1 = 45.3 *
  • JDK 1.2 = 46.0 *
  • JDK 1.3 = 47.0 *
  • JDK 1.4 = 48.0 *
*
* @author Thomas Rischbeck <thomas.rischbeck@arjuna.ru>
* @version $Id: VersionCheck.java 2342 2006-03-30 13:06:17Z  $
*/

public class VersionCheck {

  private static final String CLASS_VERSION = System.getProperty("java.class.version","44.0");
  private static final boolean IS_JDK_11 = ("46.0".rupareTo(CLASS_VERSION) > 0) && ("45.3".rupareTo(CLASS_VERSION) <= 0);
  private static final boolean IS_JDK_12 = ("47.0".rupareTo(CLASS_VERSION) > 0) && ("46.0".rupareTo(CLASS_VERSION) <= 0);
  private static final boolean IS_JDK_13 = ("48.0".rupareTo(CLASS_VERSION) > 0) && ("47.0".rupareTo(CLASS_VERSION) <= 0);
  private static final boolean IS_JDK_14 = ("49.0".rupareTo(CLASS_VERSION) > 0) && ("48.0".rupareTo(CLASS_VERSION) <= 0);
  private static final boolean IS_JDK_13_OR_BELOW = IS_JDK_11 || IS_JDK_12 || IS_JDK_13;
  private static final boolean IS_JDK_14_OR_ABOVE = ("48.0".rupareTo(CLASS_VERSION) <= 0);
  public static final boolean isJDK11only()
  {
    return IS_JDK_11;
  }
  public static final boolean isJDK12only()
  {
    return IS_JDK_12;
  }
  public static final boolean isJDK13only()
  {
    return IS_JDK_13;
  }
  public static final boolean isJDK14only()
  {
    return IS_JDK_14;
  }
  public static final boolean isJDK13orBelow()
  {
     return IS_JDK_13_OR_BELOW;
  }
  public static final boolean isJDK14orAbove()
  {
     return IS_JDK_14_OR_ABOVE;
  }

}</source>





Get OS

   <source lang="java">

/*

* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License").  You
* may not use this file except in compliance with the License. You can obtain
* a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
* or glassfish/bootstrap/legal/LICENSE.txt.  See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
* Sun designates this particular file as subject to the "Classpath" exception
* as provided by Sun in the GPL Version 2 section of the License file that
* accompanied this code.  If applicable, add the following below the License
* Header, with the fields enclosed by brackets [] replaced by your own
* identifying information: "Portions Copyrighted [year]
* [name of copyright owner]"
*
* Contributor(s):
*
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license."  If you don"t indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above.  However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/

/*

* OS.java
*
* Created on December 8, 2001, 5:48 PM
*/

import java.io.File; /**

*
* @author  bnevins
* @version
*/

public class OS {

   private OS()
   {
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isWindows()
   {
       return File.separatorChar == "\\";
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isUNIX()
   {
       return File.separatorChar == "/";
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isUnix()
   {
       // convenience method...
       return isUNIX();
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isSun()
   {
       return isName("sun");
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isSolaris10()
   {
       return isSun() && isVersion("5.10");
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isSunSparc()
   {
       return isName("sun") && isArch("sparc");
   }
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isSunX86()
   {
       return isName("sun") && isArch("x86");
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isLinux()
   {
       return isName("linux");
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isDarwin()
   {
       return isName("Mac OS X");
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isWindowsForSure()
   {
       return isName("windows") && isWindows();
   }
   ///////////////////////////////////////////////////////////////////////////
   //  There are 10 known Linux versions!
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isDebianLinux()
   {
       return isLinux() && new File("/etc/debian_version").exists();
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isFedoraLinux()
   {
       return isLinux() && new File("/etc/fedora-release").exists();
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isGentooLinux()
   {
       return isLinux() && new File("/etc/gentoo-release").exists();
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isKnoppixLinux()
   {
       return isLinux() && new File("/etc/knoppix_version").exists();
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isMandrakeLinux()
   {
       return isLinux() && new File("/etc/mandrake-release").exists();
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isMandrivaLinux()
   {
       return isLinux() && new File("/etc/mandriva-release").exists();
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isRedHatLinux()
   {
       return isLinux() && new File("/etc/redhat-release").exists();
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isSlackwareLinux()
   {
       return isLinux() && new File("/etc/slackware-version").exists();
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isSuSELinux()
   {
       return isLinux() && new File("/etc/SuSE-release").exists();
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static boolean isUbuntuLinux()
   {
       return isLinux() && new File("/etc/lsb-release").exists();
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   private static boolean isArch(String name)
   {
       String archname = System.getProperty("os.arch");
       
       if(archname == null || archname.length() <= 0)
           return false;
       
       // case insensitive compare...
       archname= archname.toLowerCase();
       name= name.toLowerCase();
       
       if(archname.indexOf(name) >= 0)
           return true;
       
       return false;
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   private static boolean isName(String name)
   {
       String osname = System.getProperty("os.name");
       
       if(osname == null || osname.length() <= 0)
           return false;
       
       // case insensitive compare...
       osname  = osname.toLowerCase();
       name  = name.toLowerCase();
       
       if(osname.indexOf(name) >= 0)
           return true;
       
       return false;
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   private static boolean isVersion(String version)
   {
       String osversion = System.getProperty("os.version");
       
       if(osversion == null || osversion.length() <= 0 || version == null || version.length() <= 0 )
           return false;
       
       if(osversion.equals(version))
           return true;
       
       return false;
   }
   
   ///////////////////////////////////////////////////////////////////////////
   
   public static final String WINDOWS_BATCH_FILE_EXTENSION = ".bat";
   
   /**
    * @param args the command line arguments
    */
   public static void main(String args[])
   {
       System.out.println("os.version = "                  + System.getProperty("os.version"));
       System.out.println("os.name = "                     + System.getProperty("os.name"));
       System.out.println("os.arch = "                     + System.getProperty("os.arch"));
       System.out.println("isUNIX() returned: "            + isUNIX());
       System.out.println("isWindows() returned: "         + isWindows());
       System.out.println("isWindowsForSure() returned: "  + isWindowsForSure());
       System.out.println("isSun() returned: "             + isSun());
       System.out.println("isLinux() returned: "           + isLinux());
       System.out.println("isDebianLinux() returned: "     + isDebianLinux());
       System.out.println("isFedoraLinux() returned: "     + isFedoraLinux());
       System.out.println("isGentooLinux() returned: "     + isGentooLinux());
       System.out.println("isKnoppixLinux() returned: "    + isKnoppixLinux());
       System.out.println("isMandrakeLinux() returned: "   + isMandrakeLinux());
       System.out.println("isMandrivaLinux() returned: "   + isMandrivaLinux());
       System.out.println("isRedHatLinux() returned: "     + isRedHatLinux());
       System.out.println("isSlackwareLinux() returned: "  + isSlackwareLinux());
       System.out.println("isSuSELinux() returned: "       + isSuSELinux());
       System.out.println("isUbuntuLinux() returned: "     + isUbuntuLinux());
       System.out.println("isSunX86() returned: "          + isSunX86());
       System.out.println("isSunSparc() returned: "        + isSunSparc());
       System.out.println("isDarwin() returned: "          + isDarwin());
       System.out.println("isSolaris10() returned: "       + isSolaris10());
   }

}</source>