`
finally_mm
  • 浏览: 24326 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于Java文件路径问题

阅读更多
1.如何获得当前文件路径
常用:字符串类型:System.getProperty("user.dir");
综合:
package lin.lin.lin;
import java.io.File;
public class Test {
	public static void main(String[] args) throws Exception {
        System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
        System.out.println(Test.class.getClassLoader().getResource(""));
        System.out.println(ClassLoader.getSystemResource(""));
        System.out.println(Test.class.getResource(""));
        System.out.println(Test.class.getResource("/"));
        System.out.println(new File("").getAbsolutePath());
        System.out.println(System.getProperty("user.dir"));	
        /*
        file:/E:/workspaces/ys/WebRoot/WEB-INF/classes/
		file:/E:/workspaces/ys/WebRoot/WEB-INF/classes/
		file:/E:/workspaces/ys/WebRoot/WEB-INF/classes/
		file:/E:/workspaces/ys/WebRoot/WEB-INF/classes/lin/lin/lin/
		file:/E:/workspaces/ys/WebRoot/WEB-INF/classes/
		E:\workspaces\ys
		E:\workspaces\ys
        */
	}
}

2.Web服务中
(1).Weblogic
WebApplication的系统文件根目录是你的weblogic安装所在根目录。
例如:如果你的weblogic安装在c:\bea\weblogic700.....
那么,你的文件根路径就是c:\.
所以,有两种方式能够让你访问你的服务器端的文件:
a.使用绝对路径:
比如将你的参数文件放在c:\yourconfig\yourconf.properties,
直接使用 new FileInputStream("yourconfig/yourconf.properties");
b.使用相对路径:
相对路径的根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放在yourwebapp\yourconfig\yourconf.properties,
这样使用:new FileInputStream("./yourconfig/yourconf.properties");
这两种方式均可,自己选择。
(2).Tomcat
在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin
(3).Resin
不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET的路径为根.比如用新建文件法测试File f = new File("a.htm");
这个a.htm在resin的安装目录下
(4).如何读相对路径
在Java文件中getResource或getResourceAsStream均可
例:getClass().getResourceAsStream(filePath);//filePath可以是"/filename",这里的/代表web发布根路径下WEB-INF/classes

(5).获得文件真实路径
string  file_real_path=request.getRealPath("mypath/filename"); 
通常使用request.getRealPath("/");

3.文件操作的类
见附件

4.按Java文件类型分类读取配置文件
配置文件是应用系统中不可缺少的,可以增加程序的灵活性。java.util.Properties是从jdk1.2就有的类,一直到现在都支持load ()方法,jdk1.4以后save(output,string) ->store(output,string)。如果只是单纯的读,根本不存在烦恼的问题。web层可以通过 Thread.currentThread().getContextClassLoader().getResourceAsStream("xx.properties") 获取;Application可以通过new FileInputStream("xx.properties");直接在classes一级获取。关键是有时我们需要通过web修改配置文件,我们不能将路径写死了。经过测试觉得有以下心得:
(1)servlet中读写。
如果运用Struts 或者Servlet可以直接在初始化参数中配置,调用时根据servlet的getRealPath("/")获取真实路径,再根据String file = this.servlet.getInitParameter("abc");获取相对的WEB-INF的相对路径。
例:
		InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("abc.properties");
		Properties prop = new Properties();
		prop.load(input);
		input.close();
		OutputStream out = new FileOutputStream("filepath");
		prop.setProperty("abc", "test");
		prop.store(out, "–test–");//-test-为注释
		out.close();


(2)直接在jsp中操作
通过jsp内置对象获取可操作的绝对地址。
例:
// jsp页面
String path = pageContext.getServletContext().getRealPath("/");
String realPath = path+"/WEB-INF/classes/abc.properties";


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics