Java与操作系统的交互

System

System表示Java程序的运行平台。System实例的对象不能被创建。

 

 

获取环境变量和系统属性

static Map<String,String> getenv()

          返回一个不能修改的当前系统环境的字符串映射视图。

static String getenv(String name)

          获取指定的环境变量值。

static void setProperties(Properties props)

          将系统属性设置为 Properties 参数。

static String setProperty(String key, String value)

          设置指定键指示的系统属性。

static Properties getProperties()

          确定当前的系统属性。

static String getProperty(String key)

          获取指定键指示的系统属性。

static String getProperty(String key, String def)

          获取用指定键描述的系统属性。

static String clearProperty(String key)

          移除指定键指示的系统属性。

 

 

获取当前时间

static long currentTimeMillis()

          返回以毫秒为单位的当前时间。

static long nanoTime()

          返回最准确的可用系统计时器的当前值,以微秒为单位。

这两个方法的返回值的粒度取决于底层操作系统,可能所在操作系统根本不支持以毫秒、微妙作为计时单位。nanoTime()方法比较少用,大部分操作系统都不能支持以微秒作为计时单位。

 

 

 

系统标准输入、标准输出、错误输出流

System类的字段:

static PrintStream err   “标准”错误输出流。

static InputStream in   “标准”输入流。

static PrintStream out   “标准”输出流。

 

System类的方法:

static void setErr(PrintStream err)

          重新分配“标准”错误输出流。

static void setIn(InputStream in)

          重新分配“标准”输入流。

static void setOut(PrintStream out)

          重新分配“标准”输出流。

 

 

 

关于HashCode

static int identityHashCode(Object x)

          返回给定对象的哈希码,该代码与默认的方法 hashCode() 返回的代码一样,无论给定对象的类是否重写 hashCode()

 

 

 

关于数组

static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

          复制数组。从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

 

 

Java虚拟机

static void exit(int status)

          终止当前正在运行的 Java 虚拟机。

static void gc()

          运行垃圾回收器。

static Console console()

          返回与当前 Java 虚拟机关联的唯一 Console 对象(如果有)。

 

 

其他

static SecurityManager getSecurityManager()

          获取系统安全接口。

static Channel inheritedChannel()

          返回从创建此 Java 虚拟机的实体中继承的信道。

static void load(String filename)

          从作为动态库的本地文件系统中以指定的文件名加载代码文件。

static void loadLibrary(String libname)

          加载由 libname 参数指定的系统库。

static String mapLibraryName(String libname)

          将一个库名称映射到特定于平台的、表示本机库的字符串中。

static void runFinalization()

          运行处于挂起终止状态的所有对象的终止方法。

static void runFinalizersOnExit(boolean value)

          已过时。 该方法具有固有的不安全性。它可能对正在使用的对象调用终结方法,而其他线程同时正在操作这些对象,从而导致不正确的行为或死锁。

static void setSecurityManager(SecurityManager s)

          设置系统安全性。

 

 

 

 

 

 

 

 

Runtime

Runtime类代表Java程序的运行时环境,每个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连。

Rumtime实例通过getRuntime()方法获取与之关联的Runtime对象。

 

获取Runtime实例

static Runtime getRuntime()

          返回与当前 Java 应用程序相关的运行时对象。

 

 

Runtime类可以访问JVM相关信息

处理器储量,内存信息

int availableProcessors()

          Java 虚拟机返回可用处理器的数目。

long freeMemory()

          返回 Java 虚拟机中的空闲内存量。

long totalMemory()

          返回 Java 虚拟机中的内存总量。

long maxMemory()

          返回 Java 虚拟机试图使用的最大内存量。

 

 

启动一条进程运行操作系统命令

Process exec(String command)

          在单独的进程中执行指定的字符串命令。

Process exec(String[] cmdarray)

          在单独的进程中执行指定命令和变量。

Process exec(String[] cmdarray, String[] envp)

          在指定环境的独立进程中执行指定命令和变量。

Process exec(String[] cmdarray, String[] envp, File dir)

          在指定环境和工作目录的独立进程中执行指定的命令和变量。

Process exec(String command, String[] envp)

          在指定环境的单独进程中执行指定的字符串命令。

Process exec(String command, String[] envp, File dir)

          在有指定环境和工作目录的独立进程中执行指定的字符串命令。

 

 

 

 

 

 

 

JVM相关

void exit(int status)

          通过启动虚拟机的关闭序列,终止当前正在运行的 Java 虚拟机。

void gc()

          运行垃圾回收器。

void halt(int status)

          强行终止目前正在运行的 Java 虚拟机。

void load(String filename)

          加载作为动态库的指定文件名。

void loadLibrary(String libname)

         加载具有指定库名的动态库。

void addShutdownHook(Thread hook)

          注册新的虚拟机来关闭钩子。

boolean removeShutdownHook(Thread hook)

          取消注册某个先前已注册的虚拟机关闭钩子。

void runFinalization()

          运行挂起 finalization 的所有对象的终止方法。

void traceInstructions(boolean on)

          启用/禁用指令跟踪。

void traceMethodCalls(boolean on)

          启用/禁用方法调用跟踪。

 

 

 

 

 

 

Process

该类为抽象类。

ProcessBuilder.start() Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获得相关信息。

Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。

 

abstract  void destroy()

          杀掉子进程。

abstract  int exitValue()

          返回子进程的出口值。

abstract  InputStream getErrorStream()

          获取子进程的错误流。

abstract  InputStream getInputStream()

          获取子进程的输入流。

abstract  OutputStream getOutputStream()

          获取子进程的输出流。

abstract  int waitFor()

          导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。

 

 

 

ProcessBuilder

java.lang.ProcessBuilder此类用于创建操作系统进程。

 

每个 ProcessBuilder 实例管理一个进程属性集。start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。

 

每个进程生成器管理这些进程属性:

命令 是一个字符串列表,它表示要调用的外部程序文件及其参数(如果有)。在此,表示有效的操作系统命令的字符串列表是依赖于系统的。例如,每一个总体变量,通常都要成为此列表中的元素,但有一些操作系统,希望程序能自己标记命令行字符串——在这种系统中,Java 实现可能需要命令确切地包含这两个元素。

环境 是从变量 到值 的依赖于系统的映射。初始值是当前进程环境的一个副本(请参阅 System.getenv())。

工作目录。默认值是当前进程的当前工作目录,通常根据系统属性 user.dir 来命名。

redirectErrorStream 属性。最初,此属性为 false,意思是子进程的标准输出和错误输出被发送给两个独立的流,这些流可以通过 Process.getInputStream() Process.getErrorStream() 方法来访问。如果将值设置为 true,标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。在此情况下,合并的数据可从 Process.getInputStream() 返回的流读取,而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。

修改进程构建器的属性将影响后续由该对象的 start() 方法启动的进程,但从不会影响以前启动的进程或 Java 自身的进程。

 

大多数错误检查由 start() 方法执行。可以修改对象的状态,但这样 start() 将会失败。例如,将命令属性设置为一个空列表将不会抛出异常,除非包含了 start()

 

注意,此类不是同步的。如果多个线程同时访问一个 ProcessBuilder,而其中至少一个线程从结构上修改了其中一个属性,它必须 保持外部同步。

 

很容易启动一个使用默认工作目录和环境的新进程:

 

 Process p = new ProcessBuilder("myCommand", "myArg").start();

 下面是一个利用修改过的工作目录和环境启动进程的例子:

 

 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");

 Map<String, String> env = pb.environment();

 env.put("VAR1", "myValue");

 env.remove("OTHERVAR");

 env.put("VAR2", env.get("VAR1") + "suffix");

 pb.directory(new File("myDir"));

 Process p = pb.start();

 要利用一组明确的环境变量启动进程,在添加环境变量之前,首先调用 Map.clear()

 

 

构造方法摘要

ProcessBuilder(List<String> command)

          利用指定的操作系统程序和参数构造一个进程生成器。

ProcessBuilder(String... command)

          利用指定的操作系统程序和参数构造一个进程生成器。

方法摘要

List<String> command()

          返回此进程生成器的操作系统程序和参数。

ProcessBuilder command(List<String> command)

          设置此进程生成器的操作系统程序和参数。

ProcessBuilder command(String... command)

          设置此进程生成器的操作系统程序和参数。

File directory()

          返回此进程生成器的工作目录。

ProcessBuilder directory(File directory)

          设置此进程生成器的工作目录。

Map<String,String> environment()

          返回此进程生成器环境的字符串映射视图。

boolean redirectErrorStream()

          通知进程生成器是否合并标准错误和标准输出。

ProcessBuilder redirectErrorStream(boolean redirectErrorStream)

          设置此进程生成器的 redirectErrorStream 属性。

Process start()

          使用此进程生成器的属性启动一个新进程。

 

你可能感兴趣的:(java)