在java中相对路径的设置是一个比较头痛的问题:配置文件应该写在哪里,"/","./"等各自代表着什么含义,普通的java工程和jsp(servlet)的路径有什么不同,这都是我们特别需要留意的。不然在程序开发中会死得很惨(个人以前深有体会,看似很简单的路径设置,往往要花很多的时间才能搞定)。
一、Java Project
1. 普通目录的读取
如果com.taobao.jifeng下的TestPath.java要读取jifeng文件夹下的file.txt文件,路径设置为
[c-sharp] view plaincopy
- File file = new File("jifeng/file.txt");
ps:在这里“jifeng/file.txt”就是从该工程首目录开始的,而“/”开始表示的是绝对路径,“./jifeng/file.txt”的作用和“jifeng/file.txt”的路径设置时相同的
2. 读取properties文件
从TestProperties.java读取与它同目录下的config.default.properties文件,在java工程中properties的配置文件是被当做跟*.java文件一样使用的。
[c-sharp] view plaincopy
- Properties properties = new Properties();
- InputStream is = null;
- is = TestProperties.class.getResourceAsStream("/com/taobao/jifeng/properties/config.default.properties");
- try {
- properties.load(is);
- String key = "name";
- System.out.println(properties.getProperty(key));
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
properties文件的具体操作可以参见:java中的Properties文件操作使用举例
ps:properties文件的读取方式大致是相同的,无论是javaproject,servlet等
二、可运行的jar文件
文件位置
[c-sharp] view plaincopy
- File file = new File("jifeng/file.txt");
三、Servlet(JSP),服务器是JBOSS
1. 页面之间的跳转,加入工程名为WebAndesProject,情况一和情况二相等
情况一
[c-sharp] view plaincopy
- <form action=/"./GetResultJSON/">" +
- "</form>"
情况二:
[c-sharp] view plaincopy
- "<form action=/"/WebAndesProject/GetResultJSON/">" +
- "</form>"
在servlet或jsp中“/”表示的jboss的总目录,"./"表示的是jboss下面该工程的目录,servlet路径可设置
2. 读取文件
文件位置:
servlet的获取其绝对路径的写法:
[c-sharp] view plaincopy
- String path = request.getRealPath("config/config.default.properties");
四、log4j中路径的设置
Log4J的位置,在myeclipse开发时
log4j.properties中的内容:
[c-sharp] view plaincopy
- log4j.appender.log = org.apache.log4j.DailyRollingFileAppender
- log4j.appender.log.File = hp/log.log
- log4j.appender.log.Append = true
- log4j.appender.log.Threshold = INFO
- log4j.appender.log.DatePattern=‘.‘yyyy-MM-dd
- log4j.appender.log.layout = org.apache.log4j.PatternLayout
- log4j.appender.log.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t ] %m%n
正式部署到jboss时,日志生成会在jboss/bin/hp/log.log目录下