为什么我取Tomcat的环境变量取不出来呢!我用的jdk1.5,在搞不出来,老板就要炒我尤鱼了!
有两种取CATALINA_HOME的方法,我都试了,
第一种方法测试的代码如下:
package demo;
public class CSDN6 {
public static void main(String[] args)
{
System.out.println(System.getenv("CATALINA_HOME"));
}
}
程序输出结果为null,程序输出结果为什么是null??我的CATALINA_HOME设置如下C:\Program Files\Apache Software Foundation\Tomcat 5.0第二种方法的测试代码如下:
package demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class CSDN6 {
public static void main(String[] args)
{
Runtime rt = Runtime.getRuntime();
try {Process p= rt.exec("cmd /c echo \"%CATALINA_HOME%\"");
BufferedReader in= new BufferedReader(new InputStreamReader(p.getInputStream()));
String path = in.readLine();
System.out.print(path);} catch (IOException e) {
e.printStackTrace();
}
}
}
程序输出结果是"%CATALINA_HOME%"!怎么会这样啊!怎样才能取出来啊:C:\Program Files\Apache Software Foundation\Tomcat 5.0
这个问题我已经搞了很久了,在搞不出来,老板就要炒我了!高手帮帮我!感激啊!

解决方案 »

  1.   

    Runtime rt = Runtime.getRuntime();
        try {
           Process p = rt.exec("cmd /c echo %JAVA_HOME%");
           BufferedReader in = new BufferedReader(new InputStreamReader(p.
               getInputStream()));
           String path = in.readLine();
           System.out.print(path);
        }
        catch (IOException ex) {
          ex.printStackTrace();
        }
      

  2.   

    to tongor(秦唐人):
    项目需要啊!我要在这个目录下拷东西啊!比如我在C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\hello\Data目录下执行一些操作,比如拷贝,删除,更新等,这全部是项目的需要!
      

  3.   

    System.out.println(System.getenv("CATALINA_HOME"));
     最初的Java语言有一个访问环境变量的方法System.getenv(),但因为Java宣称的”Write Once,Run AnyWhere”特性,所以在JDK1.0中去掉了这个能够访问平台专有信息的方法。在J2SE5.0中,它又来了,并有所扩充。
      

  4.   

    我这第一种好用,不知道你的是什么系统,我这xp,设置的是“TOMCAT_HOME”。
      

  5.   

    to lip009(深蓝忧郁): 
    大哥,我要的是CATALINA_HOME,你非要给我取JAVA_HOME!我是CATALINA_HOME取不出啊!你把JAVA_HOME变成CATALINA_HOME,就取不出来了!你自己试试好吗?
      

  6.   

    to buyaowen(外包需要掌握三点):
    我设的是CATALINA_HOME,CATALINA_HOME和TOMCAT_HOME这两个环境变量是一回事吗?
    to lip009(深蓝忧郁):
    我查过jdk1.5的 ,System.out.println(System.getenv("CATALINA_HOME"));应该是可行的,可是我就是出不来啊!
      

  7.   

    to ykzhujiang(朱朱):
    我环境变量设置如下:
    变量名:CATALINA_HOME
    变量值:C:\Program Files\Apache Software Foundation\Tomcat 5.0;
    你觉得这个有错吗??我实在是不知道哪里错了!
    我第一种方法取出来就是null!
      

  8.   

    to ykzhujiang(朱朱):
    我的第二种方法取出来是%CATALINA_HOME%,我用的xp,IDE用的是Eclipse3.2.0,会不会和我eclipse有关啊!郁闷呢!
      

  9.   

    Process p= rt.exec("cmd /c set CATALINA_HOME");这样应该可以的吧
      

  10.   

    1.5 似乎 还有一个新类ProcessBuilder可以用
      

  11.   

    jimmyshao(杰米) ( ) :
    不行啊!测试结果是null,代码给你帖出来!
    package demo;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;public class CSDN6 {
    public static void main(String[] args)
    {
    Runtime rt = Runtime.getRuntime();
        try {
         Process p= rt.exec("cmd /c set CATALINA_HOME");    //   Process p = rt.exec("cmd /c echo %CATALINA_HOME%");
           BufferedReader in = new BufferedReader(new InputStreamReader(p.
               getInputStream()));
           String path = in.readLine();
           System.out.print(path);
        }
        catch (IOException ex) {
          ex.printStackTrace();
        }}
    }输出结果是null,是不是我Tomcat有问题?可是我Tomcat可以打开啊,我端口号是8083
    我http://localhost:8083/可以打开Tomcat的!
      

  12.   

    我帮你测试了一下,重启下机器就可以找到%CATALINA_HOME%变量了.因为环境变量设定后,系统不能即时加载的
      

  13.   

    是IDE的问题,你在DOS下用java A来执行,就可以正确获得值
    import java.util.Enumeration;
    import java.util.Properties;
    import java.io.*;
    public class A
    {
    public static void main(String args[]){
    Runtime rt = Runtime.getRuntime();
    try {
       Process p = rt.exec("cmd /c echo %CATALINA_HOME%");
       BufferedReader in = new BufferedReader(new InputStreamReader(p.
       getInputStream()));
       String path = in.readLine();
       System.out.println(path);
    }
    catch (IOException ex) {
      ex.printStackTrace();
    }
    }
    }
      

  14.   

    to tongor(秦唐人):
    项目需要啊!我要在这个目录下拷东西啊!比如我在C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\hello\Data目录下执行一些操作,比如拷贝,删除,更新等,这全部是项目的需要!
    --------------------------干吗取这个!!!!
    万一我的tomcat是C:\Program Files\Apache Software Foundation\Tomcat 5.0,但是部署的确实D:\hello怎么办???!!!你的目的是读写某个文件,使之能够被用户通过http://..../hello/abc/123/xyz.dat访问,对吧?request.getRealPath("/abc/123/xyz.dat")就会得到这个服务器路径对应的本地真实路径了
      

  15.   

    第二,如果你需要通过系统环境得到某个目录,则应当是(如上所述,不应该是tomcat目录,而是web应用的目录)System.getProperty("HELLO_WEB_APP");
    java "-DHELLO_WEB_APP=C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\hello" demo.CSDN6eclipse里面在运行的设置arguments里面添加tomcat 在catalina.bat里面添加或者修改set JAVA_OPTION=%JAVA_OPTION%;"-DHELLO_WEB_APP=C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\hello"
      

  16.   

    要不 试试 Process p= rt.exec("cmd /c set");
    看看 环境变量里 有没有你要的那个
      

  17.   

    补充一点,要想取%CATALINA_HOME%变量,首先应当在环境变量里设定它,因为Tomcat在调用%CATALINA_HOME%时在批处理文件里进行了预设定,所以能正确找到,祝好运!
      

  18.   

    不知道LZ是不是没设置系统环境变量 catalina_home 呀我的没问题
      

  19.   

    刚我重启下电脑就好了!因为环境变量设定后,系统不能即时加载的!我原来在jdk1.4.2下改CATALINA_HOME后不需要重启,现在用jdk1.5了,反而要重启电脑了!
      

  20.   

    to shine333(enihs):
    1.request.getRealPath("/abc/123/xyz.dat");这种方法只能用在jsp页面吧,我做的是GUI啊,用swing写的程序!request.getRealPath("/abc/123/xyz.dat");能用在swing中吗?
    2.关于项目的部署问题:
    hello是一个web工程,我暂时让用户部署在Tomcat的webapps下,但是这样不灵活,如果能让用户随便把hello拷到任何他想要的位置就好了!
    System.getProperty("HELLO_WEB_APP");这句话应该可以在swing中用的吧!
    然后在eclipse里面在运行的设置arguments里面添加:
    java "-DHELLO_WEB_APP=C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\hello" demo.CSDN6就可以了吗?catalina.bat文件要我自己写的吗?
      

  21.   

    你swing的话,catalina.bat当然不必了
    arguments添加"-DHELLO_WEB_APP=C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\hello"
      

  22.   

    项目部署在tomcat下?
    要得到项目所在的目录?
      

  23.   

    验证::::
    在命令行下,是可以的,可能是IDE的问题
      

  24.   

    C:\Program Files\Apache Software Foundation\Tomcat 5.0
    这样写,因为有空格,所以jAVA不认,JAVA是跨平台的,而unix下无法使用空格在目录里
    你可以设置
    CATALINA_HOME=C:\Progra~1\Apache~1\Tomcat~1来试试,我遇到过类似情况,就是这样解决的
      

  25.   

    yxhzj(余华[学习J2EE中]) :
    项目部署在哪里应该由用户选择的,假如我的web项目的名字叫hello,怎样设置才可以让用户不管把项目部署在哪里都可以用Tomcat打开呢?比如项目部署在d:/hello,或e:/hello,或任何用户想部署的地方!我现在不知道怎么做设置,所以暂时让项目部署在Tomcat的Webapps下了!
      

  26.   

    由于本人开发经验不足,难免会遇到一些问题,大家想想这个hello项目的部署问题该怎样解决呢?我是没有办法才让用户部署在Tomcat的Webapps下,这样http://localhost:8083/hello就可以访问这个项目了,我那个swing模块是对hello工程做一些操作!通过http://localhost:8083/hello就可以得到操作的结果了!不知道大家明白我的思路了吗?
      

  27.   

    我在系统XP的系统变量设置好CATALINA_HOME,运行下面的程序,结果为NULL,在系统的命令行下输入 CMD /C ECHO %CATALINA_HOME% 结果空白行,换了其他的系统变量都可以显示,把机器重新启动后,再次运行问题解决了.可能是系统变量更新方面的问题!
    package demo;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;public class CSDN6 {
    public static void main(String[] args)
    {
    Runtime rt = Runtime.getRuntime();
    try {Process p= rt.exec("cmd /c echo %CATALINA_HOME% ");
    BufferedReader in= new BufferedReader(new InputStreamReader(p.getInputStream()));
    String path = in.readLine();
    System.out.print(path);} catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    可以
      

  28.   

    楼主你的第二种方法本来是对的,但就是多加了个引号。Process p= rt.exec("cmd /c echo \"%CATALINA_HOME%\"");
    应该是
    Process p= rt.exec("cmd /c echo %CATALINA_HOME%");