访问属性文件:Java和Linux的

问题描述:

这是我的文件夹结构访问属性文件:Java和Linux的

proj  
    --src 
    --config  
    --bin 

在linux下的

/home/proj/src 
/home/proj/config 

我的config文件夹中包含log4j的属性文件。

我想在linux中执行我的java类。

这是我如何在我的java类访问它(这肯定是错误的)

String propFile = "/../config/Log4jprop.properties"; 
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader(); 
URL logPropFile = systemClassLoader.getResource(propFile); 
PropertyConfigurator.configure(logPropFile); 

我需要能够从我的课访问我的属性文件在Linux操作系统。

我命令的一部分是如下

java -classpath /home/proj/config/Log4jprop.properties:./ Start 

我怎样才能确保日志属性文件是只读?

+0

如果该文件是在类路径中,那么你并不需要指定的路径,只如果你正在使用类加载器加载它,文件名将会执行。 – 2013-03-14 10:30:09

解决的办法之一可能是:

  1. 删除你的 “属性文件读取的代码在所有”
  2. 的Java -Dlog4j.configuration运行命令= /家/proj/config/Log4jprop.properties:./开始

或者:

  1. 重命名你的属性文件log4j.properties
  2. 将其添加到您的类路径
+0

是的你的第二个解决方案work.thanks – Abi 2013-03-14 11:00:09

如果您传递的属性文件的路径,那么这是选项:

props.load(new FileReader("/home/whatever/config.properties")); 
+0

我不能硬编码它,我需要给出一个相对路径 – Abi 2013-03-14 10:32:24

你可以做到这一点,设置classpath以“凸出”的文件夹后。

FileInputStream str = null; 
    Properties prop = new Properties(); 
    try 
    { 
     str = new FileInputStream("config/Log4jprop.properties"); 
     prop.load(str); 
     PropertyConfigurator.configure(prop); 
    }catch(IOException ex) { 
     ex.printStackTrace(); 
    }finally { 
     if(str != null) { 
      try { 
       str.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

不,那么我必须从config的父文件夹执行此代码。我想要一个相对路径,例如 - 转到root-> config并阅读prop文件 – Abi 2013-03-14 10:56:27

+0

这里“config/Log4jprop.properties”是属性文件的相对路径,它是相对于类路径的。 – Kishore 2013-03-14 12:05:38