`

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实现重启操作系统

    标签“Java restart OS”表明这是关于Java与操作系统交互的话题,这涵盖了操作系统接口、系统命令执行、权限管理等多个方面。在实际开发中,除了重启之外,可能还会遇到其他系统级别的需求,如监控系统状态、管理...

    java与dll的交互

    DLL是Windows操作系统中的一个重要组件,它允许不同程序共享同一块内存中的函数和数据,从而提高了系统资源的利用率。本文将深入探讨Java如何调用DLL中的函数,并详细讲解如何编写和使用DLL,以及解决跨语言交互中...

    java语言操作系统课程设计模拟进程管理系统源码.zip

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

    基于Java的高级操作系统

    《基于Java的高级操作系统》是一本深入探讨操作系统理论与实践的专著,它结合了Java编程语言的独特视角,为读者提供了构建和理解操作系统的核心概念和技术的全面指导。这本书旨在帮助开发者和学生掌握如何利用Java...

    java 关机小程序

    总结起来,Java实现的关机小程序主要利用了Java与操作系统交互的能力,通过执行特定的系统命令来完成关机操作。这不仅展示了Java的跨平台特性,也体现了Java在系统级编程中的应用。在实际开发中,需要根据目标操作...

    java做的关机程序!

    总的来说,这个Java关机程序展示了Java与操作系统交互的能力,同时也揭示了Java程序部署时对运行环境的依赖性。对于学习Java编程以及理解跨平台应用程序开发的学生和开发者来说,这是一个有趣的实践案例。

    java连接串口需要的dll文件和jar包 32位和64位

    Java编程语言虽然主要在内存管理和操作系统交互方面依赖JVM(Java虚拟机)抽象化处理,但在某些特定场景下,如需要直接与硬件设备通信时,就需要利用特定的库来实现,比如通过串口进行通信。这里提到的"java连接串口...

    自动关机代码包_JAVA自动关系包_

    通过分析和实践这个代码,你将深入理解Java与操作系统交互的方式,以及如何在程序中实现定时任务。 总的来说,这个自动关机代码包是一个很好的学习资源,它涵盖了Java编程、系统交互和定时任务等多方面知识,对于...

    JAVA与SAP数据交互的方式总结

    这种格式使得数据能够在不同系统间无缝传输,不受操作系统或硬件平台限制。在JAVA中,可以通过SAP Java IDoc Library或者第三方库如JIDOC来处理IDoc的生成、解析和发送。IDoc有两种工作模式:落地(存储在SAP系统中...

    给cmd穿曾java外衣

    学习和理解这样的代码示例,可以帮助开发者更好地掌握Java与操作系统交互的技巧,以及如何利用Java构建具有CMD调用功能的GUI应用。 总的来说,"给cmd穿曾java外衣"是一个将命令行操作与GUI结合的实践,它展示了Java...

    java 通过jni查看windows的CPU利用率的问题

    在Java编程环境中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言(如C++或C)进行交互。...这个话题对于想要深入理解Java与操作系统交互的开发者具有很高的学习价值。

    Java操作系统管理软件(Swing)

    总的来说,"Java操作系统管理软件(Swing)"是一个结合了理论与实践的项目,它展示了如何利用Java和Swing构建一个具有MVC架构的桌面应用。对于想要提升Java GUI编程技能或者对操作系统原理感兴趣的开发者和学生,这...

    Android、Windows、Linux下实现c++与java交互

    本主题将探讨如何在Android、Windows和Linux操作系统中实现C++与Java的交互,特别是利用中间件技术来实现这一目标。这通常涉及到Java Native Interface (JNI) 和Java虚拟机(JVM)的应用。 首先,让我们深入理解JNI...

    java前端交互

    Java前端交互是Web开发中的重要环节,涉及到服务器与客户端之间的数据传输、状态管理以及用户界面的实时更新。在这个过程中,Java通常作为后端语言处理业务逻辑,而前端则负责展示和用户交互。以下是对给定文件信息...

    java版随机点名交互系统

    总结来说,这个Java版随机点名交互系统结合了用户认证、随机算法和数据库操作等多个核心技术,提供了一个实用的点名工具。通过学习和理解这个系统的实现,开发者不仅可以掌握Java编程,还能深入理解Spring Security...

    基于java 的学生信息管理系统

    在这个系统中,Java作为后端开发语言,用于处理用户请求、业务逻辑和与数据库的交互;MySQL则作为关系型数据库管理系统,存储和管理学生的信息。 Java是广泛使用的面向对象编程语言,以其跨平台、高效性和丰富的...

    基于VRML和Java Applet的动态交互场景的构建.pdf

    当VRML与Java Applet结合时,可以构建出更加动态、交互性更强的虚拟场景。这种结合利用Java Applet的编程能力来增强VRML场景的交互性和控制能力,使用户成为场景中的直接参与者和控制者。 VRML的交互功能主要通过三...

    caozuoxitong.rar_java 操作系统

    7. **系统调用**:这些是用户程序与操作系统交互的接口。在Java实现的操作系统中,可能会有一个自定义的系统调用层。 通过研究这个项目,你可以深入理解操作系统设计的关键概念,如进程调度、内存管理、中断处理和I...

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

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

    JAVA与DLL交互

    在IT领域,尤其是在Java编程中,与DLL(动态链接库)进行交互是一个常见的需求,特别是在跨平台应用或者利用已有的C/C++库时。本文将深入探讨如何在Java中使用DLL,结合提供的"JAVA与DLL交互"的标题,以及描述中的...

Global site tag (gtag.js) - Google Analytics