Mega Code Archive

 
Categories / Java Tutorial / Development
 

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

/*  *  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;   } }