package easyway.tbs.commons; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration; import java.util.Properties; import org.apache.log4j.Logger; /** * * 本機系統信息 * @author longgangbai * */ public final class SystemHelper { private static final Logger logger = Logger.getLogger(SystemHelper.class); //獲得系統屬性集 public static Properties props=System.getProperties(); //操作系統名稱 public static String OS_NAME=getPropertery("os.name"); //行分頁符 public static String OS_LINE_SEPARATOR=getPropertery("line.separator"); //文件分隔符號 public static String OS_FILE_SEPARATOR=getPropertery("file.separator"); /** * * 根據系統的類型獲取本服務器的ip地址 * * InetAddress inet = InetAddress.getLocalHost(); * 但是上述代碼在Linux下返回127.0.0.1。 * 主要是在linux下返回的是/etc/hosts中配置的localhost的ip地址, * 而不是網卡的綁定地址。后來改用網卡的綁定地址,可以取到本機的ip地址:): * @throws UnknownHostException */ public static InetAddress getSystemLocalIp() throws UnknownHostException{ InetAddress inet=null; String osname=getSystemOSName(); try { //針對window系統 if(osname.equalsIgnoreCase("Windows XP")){ inet=getWinLocalIp(); //針對linux系統 }else if(osname.equalsIgnoreCase("Linux")){ inet=getUnixLocalIp(); } if(null==inet){ throw new UnknownHostException("主機的ip地址未知"); } }catch (SocketException e) { logger.error("獲取本機ip錯誤"+e.getMessage()); throw new UnknownHostException("獲取本機ip錯誤"+e.getMessage()); } return inet; } /** * 獲取FTP的配置操作系統 * @return */ public static String getSystemOSName() { //獲得系統屬性集 Properties props=System.getProperties(); //操作系統名稱 String osname=props.getProperty("os.name"); if(logger.isDebugEnabled()){ logger.info("the ftp client system os Name "+osname); } return osname; } /** * 獲取屬性的值 * @param propertyName * @return */ public static String getPropertery(String propertyName){ return props.getProperty(propertyName); } /** * 獲取window 本地ip地址 * @return * @throws UnknownHostException */ private static InetAddress getWinLocalIp() throws UnknownHostException{ InetAddress inet = InetAddress.getLocalHost(); System.out.println("本機的ip=" + inet.getHostAddress()); return inet; } /** * * 可能多多個ip地址只獲取一個ip地址 * 獲取Linux 本地IP地址 * @return * @throws SocketException */ private static InetAddress getUnixLocalIp() throws SocketException{ Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces(); InetAddress ip = null; while(netInterfaces.hasMoreElements()) { NetworkInterface ni= (NetworkInterface)netInterfaces.nextElement(); ip=(InetAddress) ni.getInetAddresses().nextElement(); if( !ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":")==-1) { return ip; } else { ip=null; } } return null; } /** * * 獲取當前運行程序的內存信息 * @return */ public static final String getRAMinfo() { Runtime rt = Runtime.getRuntime(); return "RAM: " + rt.totalMemory() + " bytes total, " + rt.freeMemory() + " bytes free."; } }