`

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语言操作系统课程设计模拟进程管理系统源码.zip

    java语言操作系统课程设计模拟进程管理系统源码 需求分析 实现n个进程并发运行; 实现进程创建、撤销、阻塞、唤醒; 实现进程的同步; 实现优先级调度、时间片轮转、短进程优先等调度算法; 系统在运行过程中应能...

    UOS操作系统安装方法及java开发环境搭建

    操作系统国产替代,从程序员开始。中国一定强!之所以大家不用uos开发项目,仅仅只是因为缺我这篇文档。 华为电脑出厂预装的全都是UOS;国企、政府都在全面普及UOS,预计2023年全国装机量达到30%;大多数项目,现在...

    基于Android+JAVAEE架构的校园信息交互系统

    发者,成为了目前用户最多、发展最快的移动智能操作系统。开发基于Android 的应用具有广阔前景 轻量级Java EE平台是较完善的企业级Java开发平台,由于其卓越的可 扩展性及稳定性,在金融、电信等领域被广泛应用。...

    基于QT开发的人机交互界面,操作系统课程设计,模拟操作系统.zip

    基于QT开发的人机交互界面,操作系统课程设计,模拟操作系统,具有进程管理,内存管理,磁盘管理,文件系统,设备管理五个功能模块 软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++...

    java-虚拟机 操作系统监控工具-源码

    支持操作系统监控:内存状态、CPU负载、磁盘IO及吞吐率、磁盘健康状态、网卡信息、网卡IO 支持Java虚拟机监控:GC信息、内存使用情况、内存池信息、类加载器、线程堆栈 支持生成火焰图(采样事件包括CPU、内存分配、...

    医疗病历交互系统-医疗病历交互系统的设计与实现代码-java-springboot-代码-源码-项目-系统-毕设-网站-代码

    医疗病历交互系统-医疗病历交互系统的设计与实现代码-java-springboot-基于springboot的医疗病历交互系统项目-代码-源码-项目-系统-毕设-网站 1、技术栈:java,springboot,vue,ajax,maven,mysql,MyBatisPlus等 ...

    医疗病历交互系统的设计与实现代码-java-springboot-基于springboot的医疗病历交互系统项目-代码-源码

    医疗病历交互系统的设计与实现代码-java-springboot-基于springboot的医疗病历交互系统项目-代码-源码-项目-系统-毕设-网站 1、技术栈:java,springboot,vue,ajax,maven,mysql,MyBatisPlus等 2、系统的实现 ...

    《操作系统原理与设计》全本

    1.1 操作系统的定义和目标 1 1.1.1 OS作为用户与计算机硬件之间的接口 2 1.1.2 OS作为计算机系统的资源管理者 2 1.1.3 OS作为虚拟计算机 2 1.2 操作系统的形成和发展 3 1.2.1 人工操作阶段 3 1.2.2 管理程序阶段 4 ...

    本项目旨在开发一款适用于Windows操作系统的可交互软件.zip

    本项目旨在开发一款适用于Windows操作系统的可交互软件,专为汽车行业设计,用于处理效率数据、NVH半消音室数据、EOL产线数据以及整车噪声数据分析。该软件采用Python语言编写,并利用Tkinter或Qt框架构建直观且功能...

    Java自动排课系统源码.rar

    网上排课系统采用的是B/S结构模式开发的,系统是由JSP技术下的JAVA语言开发运行的,采用JDBC技术链接SQL SERVER数据库,使系统与数据进行交互。系统可以配置在Tomcat服务器上直接运行和维护使用。东方学院自动排课...

    基于JAVA jsp+sql操作系统教学网站系统的毕业设计

    通过操作系统教学网站的建设,完成了对于操作系统课程的远程化授课。可以使学生不受时间空间的限制,通过网络对于这门课程进行学习。建立起了基于B/C的网络化教学系统。本网站采用当前最流行的JSP网络编程技术,可以...

    java与mysql图形界面的简单交互管理

    1。有完整的java与mysql做的管理系统,能进行四个基本操作 2。有excel如何导入到数据库方 3。java与数据库连接心得法 4。MySQL如何与java连接

    java课程设计:通讯录管理系统

    理解并应用数据库设计和连接: 通过与MySQL数据库的交互,学会设计数据库表结构、进行增删改查等基本操作。使用JDBC连接数据库,实现系统与数据的有效交互,从而提升对数据库设计和连接技术的理解和应用。 培养软件...

    java基础学习笔记 java整合技术 java工具类.rar

    java的跨平台性是通过JVM(java虚拟机)实现的,java代码不直接与底层操作系统打交道,而是通过JVM这个中间介质间接与底层操作系统交互,JVM屏蔽了各操作系统之间的差异,不同版本的操作系统就有不同版本的JVM,只有...

    Java开发面试题整理含答案(计网、Java、操作系统、数据库、框架).zip

    系统学习:建议学习者按照资源提供的顺序和内容,系统地学习和掌握Java的知识点。 实践为王:理论知识和实战经验相结合,通过实践来加深理解和记忆。 持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持...

    Js与Native交互函数封装,适配了Android与iOS系统.zip

    Js与Native交互函数封装,适配了Android与iOS系统,模仿微信公众号jssdk,前端可以通过CDN方式引用Js文件 软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等...

    哈工大威海操作系统试题

    任何应用程序都不能绕过操作系统而直接与硬件交互 B. 没有操作系统的计算机是无法执行任何程序的 C. 设备驱动程序必须由设备厂商开发 D. 文件的长度与它占用的物理空间大小是一致的 E. 以上都不正确

    基于JAVA的汽车销售订单管理系统

    订单管理系统是汽车经销商、汽车订单管理系统、客户三者之间沟通与交互的有效延伸, 汽车销售订单管理系统力求简单化、人性化、智能化订单销售管理系统是以汽车经销商 和客户为主体服务系统。 本文设计并实现了基于...

    OS操作系统课程设计模拟磁盘管理系统SCAU

    磁盘文件模拟系统 介绍 华南农业大学SCAU操作系统OS课程设计,JAVAFX开发,可以实现...界面交互使用的是JAVA中的绑定与监听,能够根据数据变化时刻更新。数据以对象保存在文件中 JAVAFX依赖的包放在了lib文件夹中。

    JAVA网络通信系统的研究与开发.rar

    网络连接管理:Java网络通信系统能够管理客户端与服务器之间的网络连接,包括建立连接、保持连接、断开连接等操作。 数据传输:系统可以实现数据在客户端和服务器之间的可靠传输,确保数据的完整性和准确性。 实时...

Global site tag (gtag.js) - Google Analytics