Java 程序在不同操作系统上运行时,可能需要取得平台相关的属性,或者调用平台命令来完成特定功能。 Java 提供了 System 类和 Runtime 类来与程序的运行平台进行交互。
System 类代表 当 前 Java 程序的运行平台,程序不能创建 System 类的对象, System 类提供了 一 些类变量和类方法,允许直接通过 System 类来调用这些类变量和类方法。System 类提供了代表标准输入、标准输出和错误输出的类变量,并提供了 一些静态方法用于访问环境变量、系统属性的方法,还提供了加载文件和动态链接库的方法 。 下面程序通过 System 类来访问操作的环境变量和系统属性。
SystemTest.java
public test{
public class SystemTest {
public static void main(String[] args) throws Exception{
// 获取系统所有的环境变量
Map<String,String> env = System.getenv ();
for (String name : env.keySet()){
System.out.println(name + " ---> " + env .get(name)) ;
}
//获取指定环境变量的值
System .out .println(System.getenv( "JAVA_HOME ")) ;
//获取所有的系统属性
Properties props = System .getProperties();
//将所有的系统属性保存到 props.txt 文件中
props.store(new FileOutputStream( "props.txt"),"System Properties ");
//输出特定的系统属性
System.out.println(System .getProperty( "os.name"));
}
}
运行结果
该程序运行结束后还会在当前路径下生成一个 props.txt 文件 , 该文件中记录了当前平台的所有系统属性 。
System类方法
方法 | 描述 |
---|---|
static void gc() | 通知系统进行垃圾回收 |
runFinalization() | 通知系统进行资源清理 |
static long currentTimeMillis() | 此方法返回当前时间,单位为毫秒 |
nanoTime() | 此方法返回最精确的可用系统计时器的当前值,单位毫微秒 |
static int identityHashCode(Object x) | 此方法返回相同的哈希代码为给定的对象会由默认hashCode方法(返回),给定对象的类是否重写hashCode() |
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) | 此方法会复制从指定源数组的数组,开始在指定的位置,到目标数组的指定位置。 |
static String clearProperty(String key) | 此方法可删除指定键指示的系统属性。 |
static Console console() | 此方法返回与当前Java虚拟机关联的唯一Console对象(如果有) |
static long currentTimeMillis() | 此方法返回当前时间,单位为毫秒。 |
static void exit(int status) | 此方法终止当前正在运行的Java虚拟机。 |
static Map<String,String> getenv() | 此方法返回当前系统环境的不可改变的字符串映射视图。 |
static String getenv(String name) | 此方法获取指定的环境变量的值。 |
static Properties getProperties() | 此方法确定当前系统性能。 |
static String getProperty(String key) | 此方法获取指定键指示的系统属性。 |
static String getProperty(String key, String def) | 此方法获取指定键指定的系统属性。 |
static SecurityManager getSecurityManager() | 此方法得到了系统的安全接口。 |
static int identityHashCode(Object x) | 此方法返回相同的哈希代码为给定的对象会由默认hashCode方法(返回),给定对象的类是否重写hashCode()。 |
static Channel inheritedChannel() | 此方法返回从创建此Java虚拟机的实体中继承的通道。 |
static void load(String filename) | 此方法加载使用从本地文件系统中的指定文件名作为一个动态库中的代码文件。 |
static void loadLibrary(String libname) | 此方法加载libname指示参数指定的系统库。 |
static String mapLibraryName(String libname) | 此方法映射库名称为表示本机库的平台特定的字符串。 |
static void setErr(PrintStream err) | 此方法重新分配“标准”错误输出流。 |
static void setIn(InputStream in) | 此方法重新分配“标准”输入流。 |
static void setOut(PrintStream out) | 此方法重新分配“标准”输出流。 |
static void setProperties(Properties props) | 此方法设置系统属性的属性参数。 |
static String setProperty(String key, String value) | 此方法设置指定键指示的系统属性。 |
static void setSecurityManager(SecurityManager s) | 此方法设置系统的安全性。 |
API:java.lang.System
Runtime 类代表 Java 程序 的运行时环境,每个 Java 程序都有 一个与之对应的 Runtime 实例 , 应程序通过该对象与其运行时环境相连。应用程序不能创建自己的 Runtime 实例 , 但可以通过 getRuntime()方法获取与之关联的 Runtime对 象。
与 System 类似的是, Runtime 类也提供了 gc()方法和 runFinalization()方法来通知系统进行垃圾回收 、清理系统资源 , 并提供了 load(String filename)和 loadLibrary(String libname)方法来加载文件和动态链接库 。
Runtime 类代表 Java 程序的运行 时环境,可以访问JVM的相关信息,如处理器数量 、 内存信息等。
如下程序所示:
RuntimeTest.java
public class RuntimeTest {
public static void main(String[] args) {
//获取 Java 程序关联的运行时对象
Runtime rt = Runtime . getRuntime() ;
//获取 JVM 相关信息
System.out.println (" 处理器数量 "+ rt.availableProcessors());
System.out.println (" 空 闲 内存数: "+ rt. freeMemory () ) ;
System.out.println ("总 内 存数:"+ rt . totalMemory());
System.out.println("可用最大 内 存数:"+ rt . maxMemory());
}
}
Runtime 类还有一个功能 它可以直接单独启动一个进程来运行操作系统的命令,如下程序所示 :
ExecTest.java
public class ExecTest {
public static void main(String[] args) throws Exception{
Runtime rt = Runtime .getRuntime () ;
rt.exec ("notepad.exe") ;
}
}
参考: 【1】:《疯狂Java讲义》 【2】:https://www.yiibai.com/java/lang/java_lang_system.html