如何用Java程序改变系统环境变量
在java程序设置环境变量:
String path = System.getProperty("java.library.path");
path = path+"你要添加的路径";
System.setProperty("java.library.path",path);
问题补充:当在一个运行进程中设置环境变量,只可以运用于当前进程,所以。。谢谢。从网上搜到可以使用jna,调用 本地方法的方式 实现。因为c/c++实现了setenv()方法
小卓SUN 写道
自己写个batch文件,直接runtime调用啊
runtime.exec(xxx.bat, "路径")
对于初学JAVA的人来说,第一个难题就是为自己配置一个JAVA开发平台。
然而,也就不得不去安装如JDK这样的软件。对于JDK1.5的安装,我想每个人都会,也就是一直单击下去,安装是容易的了,不过配置就不是那么简单了,因为它要我们为它配置环境变量。
以下,就让我来教你如何去配置吧:
1.右击“我的电脑”,点击“属性”:选择“高级”选项卡,点击“环境变量”:
2.在“系统变量”中,设置3项系统变量,JAVA_HOME,PATH,CLASSPATH (注:“系统变量”对所有用户有用,而“用户变量”则只对当前登陆用户有用。对于变量的大小写,是不进行区分的。)
3.因为是默认安装,所以JDK1.5是安装在C:\Program Files\Java\jdk1.5.0里了。现在为三个变量设值;
新建 JAVA_HOME 设值 C:\Program Files\Java\jdk1.5.0
新建 CLASSPATH 设值 .;%JAVA_HOME%\lib;%JAVA_HOME%\libools.jar
编辑 PATH 设值 ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
注意事项:
配置JAVA_HOME变量的作用:JAVA_HOME路径下包括lib,bin,jre等文件夹,以后配tomcat,eclipse等java开发软件可能需要依赖此变量。
在设置系统变量Path(系统已经有),要注意前面的分号“;”,配置Path的作用:Path使系统可以在任何路径下识别java命令。
在设置系统变量CLASSPATH时,要注意前面的注意前面的“.;”,配置CLASSPATH变量的作用: 为系统指明java加载类(class or lib)的路径,只有类在classpath中,java命令才能识别,其中,%JAVA_HOME%就是引用前面指定的JAVA_HOME。
用户变量的设置必须注销重登录后才起作用,但是当本次配置中所有环境变量都是系统变量,而设置系统变量的则不用。
4.测试JDK1.5的环境变量是否配置成功。
“开始”->“运行”,键入“cmd”进入命令提示符下,键入命令“java -version”,出现如下信息,说明环境变量配置成功:
java version "1.5.0" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode, sharing)
5.用一个小程序测试JDK1.5是否能成功运行JAVA程序。
现在我们编辑一个java小程序,然后进行测试。现在我们就直接在C盘建一个“Hello.java”的文件吧,并记事本打开它,在它里面输入如下代码:
public class Hello
{ public static void main(String[] args)
{ System.out.println("Hello World!"); }
}
然后保存。
现在进入到命令提示符下。输入cd\来回到C盘根目录下。即如下样式:
C:\> java
程序是不能直接运行的,因此,我们得对它先进地编译,即输入javac Hello.java如下:
C:\>javac Hello.java
C:\>
这样就编译好了,如果没有编译好的话,它会提示错误。 java文件被编译好了之后,就会自动生成一个CLASS编译文件,因此我们可以运行它,只要输入“java Hello”就可以了。
C:\>java Hello
Hello World! //结果。
这样,我们就已经成功的对JDK进行配置了。
Java语言是一门跨平台的语言,具有一次编写到处运行的特点。在java的1.0版本中有System.getenv(String key)可以来取得操作系统的环境变量,但由于getenv()具有与操作系统紧密相关的特性,这与java的跨平台的跟本特征相冲突,所以在java1.2中该方法被不推荐使用。而程序员在编程的过程中经常需要用到getenv(),所以在java1.5中getenv()又重新回来了。虽然可以通过getenv()来取得系统的环境变量,但是却没有与getenv()相对应的setenv()函数来改变系统的环境变量。
C语言是一门与平台相关的语言,在多年的发展中积累了数量相当可观的库函数,在stdlib.h函数库中就有getenv(参数省略)与setenv(参数省略)来获取和改变系统的环境变量,这就给我们一个提示:能不能在java语言中调用C语言的函数库?JNI(java本地接口)正给了我们这样一个选择。
1.首先生成ChangeEnv.java文件
/**
* @author sgh
* @version 1.0.0 06/07/21
*/
public class ChangeEnv {
/**
* @param args
*/
static {
try{
System.loadLibrary("change_env");//声明欲加载的动态链接库
}
catch(UnsatisfiedLinkError e ){
System.err.println("Can not load library "+e.toString());
}
}
public native void setEnv(String name ,String value, int replace);//声明一个本地调用接口
}
说明:
1. 动态链接库在windows中是.dll文件,在linux中则是.so文件,但在System.loadLibrary("change_env")中不需要把后缀写出 ,程序会自己判断。
2. 本地接口声明方式为在普通函数前加native关键字
2. 编译java文件 :Javac ChangeEnv.java
3. 使用命令 javah ChangeEnv 生成ChangeEnv.h文件(ChangeEnv.h文件由程序自动生成,程序员不需要作任何改动)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class ChangeEnv */
#ifndef _Included_ChangeEnv
#define _Included_ChangeEnv
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: ChangeEnv
* Method: setEnv
* Signature: (Ljava/lang/String;Ljava/lang/String;I)V
*/
JNIEXPORT void JNICALL Java_ChangeEnv_setEnv
(JNIEnv *, jobject, jstring, jstring, jint);
#ifdef __cplusplus
}
#endif
#endif
说明:
1.JNIEXPORT void JNICALL Java_ChangeEnv_setEnv
(JNIEnv *, jobject, jstring, jstring, jint)是本地接口函数的声明需要在.cpp文件中实现它
4.编写ChangeEnv.cpp
#include"ChangeEnv.h"
#include<stdio.h>
#include<stdlib.h>
//与ChangeEnv.h中函数声明相同
JNIEXPORT void JNICALL Java_ChangeEnv_setEnv(JNIEnv * env, jobject obj, jstring name, jstring value, jint replace)
{
////从instring字符串取得指向字符串UTF编码的指针
const char * name_char =(const char *) env->GetStringUTFChars(name ,JNI_FALSE);
const char * value_char =(const char *) env->GetStringUTFChars(value ,JNI_FALSE);
//实际调用的C库函数
setenv(name_char,value_char,replace);
//通知虚拟机本地代码不再需要通过name_char访问Java字符串,否则会
//造成内存泄露
env->ReleaseStringUTFChars(name,(const char *)name_char);
env->ReleaseStringUTFChars(value,(const char *)value_char);
return ;
}
5.编译ChangeEnv.cpp文件,生成libchange_env.so文件
gcc -I/home/disk4/sgh/sgh/jrockit/include -I/home/disk4/sgh/sgh/jrockit/include/linux -shared -o libchange_env.so ChangeEnv.cpp
说明:
1. Linux下链接库名称必须以lib开头,否则会无法识别
6. 编写测试程序test.java
import java.io.InputStreamReader;
import java.io.LineNumberReader;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(System.getenv("PATH"));//打印改变之前的PATH路径
String pathPer = System.getProperty("java.library.path");
pathPer+=":.";
System.setProperty("java.library.path",pathPer);//把当前目录加到动态链接库路径中
ChangeEnv changePath = new ChangeEnv ();//生成一个ChangeEnv对象
changePath.setEnv("PATH","$PATH:/home/disk4/sgh/sgh/soft/slurm34/bin:/home/disk4/sgh/sgh/soft/slurm34/sbin",1);
System.out.println(System.getenv("PATH"));//打印改变之后的PATH路径
}
}
说明:
1. 可以看到PATH路径发生了变化
JNI在windows下的使用
既然所有的.h ,.cpp文件都已写好,我们不防顺便编译以下windows下的动态链接库.dll文件。
这时我们发现在windows下的vc环境中没有setenv(char * name ,char * value ,int replace),而只有putenv(char * key_value)函数,所以我们必须重写ChangeEnv.cpp,为了使ChangeEnv.class对外接口保持一致性,所以我们没有改写ChangeEnv.java中本地函数借口的声明。
1. 重写ChangeEnv.cpp函数
#include"ChangeEnv.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//与ChangeEnv.h中函数声明相同
JNIEXPORT void JNICALL Java_ChangeEnv_setEnv(JNIEnv * env, jobject obj, jstring name, jstring value, jint replace)
{
if(replace==0)//如果replace==0表示不发生置换,直接退出
return ;
////从instring字符串取得指向字符串UTF编码的指针
const char * name_char =(const char *) env->GetStringUTFChars(name ,JNI_FALSE);
const char * value_char =(const char *) env->GetStringUTFChars(value ,JNI_FALSE);
//实际调用的C库函数,把环境变量写成key=value格式
char * key_value=(char *)name_char;
strcat(key_value, "=");
strcat(key_value, value_char);
putenv(key_value);
//通知虚拟机本地代码不再需要通过name_char访问Java字符串,否则会
//造成内存泄露
env->ReleaseStringUTFChars(name,(const char *)name_char);
env->ReleaseStringUTFChars(value,(const char *)value_char);
return ;
}
2. 在vc6中新建一个动态链接库工程,添加ChangeEnv.h和ChangeEnv.cpp到该工程中去
3. 在“工具”----〉“选项-”----〉“目录”中添加java的include路径
C:\Program Files\Java\jdk1.5.0_06\include和C:\Program Files\Java\jdk1.5.0_06\include\win32
4. 单击“运行”,把生成的change_env.dll拷贝到ChangeEnv.java所在的工程目录中
5. 在ChangeEnv.java所在工程中新建一个测试程序test.java
import java.io.InputStreamReader;
import java.io.LineNumberReader;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
ChangeEnv changePath = new ChangeEnv();
changePath.setEnv("PATH", "%PATH%;c:\\", 1);
System.out.println(System.getenv("PATH"));
}
}
java使用命令编程为什么要设置环境变量!怎样设置环境变量啊?急!急!急...
答:你可以重新编辑系统环境变量ClassPath的值。对于indows2000、Windows2003、WindowsXP,用鼠标右键点击“我的电脑”,弹出菜单,然后选择属性,弹出“系统特性”对话框,再单击该对话框中的高级选项,然后点击按钮“环境变量”,添加如下的系统环境变量:变量名:ClassPath 变量值:E:\jdk1.4\jre\lib\rt.jar...
jdk(java)安装教程及环境变量设置
答:首先安装JDK,进入电脑的环境变量,添加一个jdk的系统变量即可,具体步骤如下:操作设备:戴尔电脑 操作系统:win7 1、右击我的电脑点击属性。2、进入我的电脑属性后点击高级系统设置。3、点击进入系统环境变量。4、新建一个jdk的环境变量。5、名称为JAVA_HOME,变量值为jdk的安装目录。确定退出即可。相...
如何在windows10操作系统的电脑上配置java?
答:\x0d\x0a(一)准备工作:\x0d\x0a从Oracle官网下载Java JDK安装包(版本自己决定,本案例使用的是最新的8U60版本)。\x0d\x0a(二)开始安装:\x0d\x0a下载后JDK安装包后,双击运行安装程序。傻瓜式安装程序,除了安装路径,其他的安装默认的来没有什么需要变动的,直接“下一步”到结束...
如何在java程序设置环境变量
答:方法:1、首先下载安装JDK安装包,安装过程中注意安装到其他盘,不要安装到C盘就好;2、打开我的电脑--属性--高级--环境变量;3、新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME...
win10怎样更改java的环境变量
答:JAVA_HOME变量值: C:\jdk1.6.0 (1)设置好path变量,使得我们能够在系统中的任何地方运行java应用程序,比如javac、java、javah等等,这就要找到我们安装JDK的目录,假设我们的JDK安装在C:\jdk1.6.0目录下,那么在C: \jdk1.6.0\bin目录下就是我们常用的java应用程序,我们就需要把C:...
请问运行Java程序 系统的环境变量要怎么设置
答:1.右击“我的电脑”,点击“属性”:选择“高级”选项卡,点击“环境变量”:2.在“系统变量”中,设置3项系统变量,JAVA_HOME,PATH,CLASSPATH (注:“系统变量”对所有用户有用,而“用户变量”则只对当前登陆用户有用。对于变量的大小写,是不进行区分的。)3.因为是默认安装,所以JDK1.5是安装...
java怎样设置环境变量
答:1、 打开“开始”>“程序”>“附件”>“命令提示符”2、 在“命令提示符”窗口中,输入javac,按回车执行 如果输出的内容是使用说明,则说明配置成功。如果输出的内容是“’javac’不是内部或外部命令,也不是可执行的程序或批处理文件。”,则说明配置错误,需要重新进行配置。常见的配置错误为:1)...
windows7系统如何配置java环境变量
答:推荐教程:、1、安装JDK,从Oracel官方网站上下载,也可以通过搜索,进入链接,下载完成后安装;2、安装JDK,注意更改安装目录;3、安装完成后开始配置环境变量,右击我的电脑,点击属性;4、在出现的对话框中选择高级系统设置;5、在出现的对话框中选择环境变量;6、新建名为“classpath”的变量名,变量...
如何设置自己电脑的系统环境变量?
答:"。在请教了一些朋友后得知是遇到了path问题,操作系统在一定的范围(path)内搜索javac.exe,但是没能找到。他们说设置自己的系统环境变量:新增一个JAVA_HOME变量,设为你JDK的安装目录,再编辑Path变量,加上一项 %JAVA_HOME%\bin。然后关掉并新开一个dos窗口,你就可以使用javac和java命令了。对此我...
怎么在Win7系统下安装java和eclipse 以及设置环境?
答:1、Java程序依赖JDK,就像C#程序依赖.NetFrameWork一样。所以在开发之前,必须在win7或者是linux上,安装jdk(JavaDevelopkit)里面包括java一些工具,还有JRE(JavaRuntimeEnvironment)Java运行环境。系统:windows7 jdk版本:jdk1.7 安装路径:c:/java 安装JDK时,上图显示的公共JRE和后续单独安装的JRE是...