JAVA 文件路径太深_关于Java文件路径问题(转)

本文介绍了在Java中获取文件路径的各种方法,包括使用不同Java环境(如Weblogic、Tomcat和Resin)下的系统属性及类加载器来获取文件的真实路径。同时,还讨论了在Web应用程序中读取配置文件的多种方式。

1.如何获得当前文件路径

常用:

字符串类型:System.getProperty("user.dir");

综合:

package com.zcjl.test.base;

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:/workSpace/javaTest/target/classes/

file:/E:/workSpace/javaTest/target/classes/

file:/E:/workSpace/javaTest/target/classes/

file:/E:/workSpace/javaTest/target/classes/javaAPI/

file:/E:/workSpace/javaTest/target/classes/

E:\workSpace\javaTest

E:\workSpace\javaTest

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

也可以getClass().getClassLoader().getResourceAsStream(filePath)//filePath不是带“/”的

(5).获得文件真实路径

string  file_real_path=request.getRealPath("mypath/filename");

通常使用request.getRealPath("/");

4.遗留问题

目前new FileInputStream()只会使用绝对路径,相对

InputStream in1 = new FileInputStream("abc1.properties"); // 相对路径

InputStream in2 = new FileInputStream("/abc2.properties"); // 绝对路径,E盘下

InputStream in3 = new FileInputStream("e://abc3.properties"); //相对路径

5.按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(path);

prop.setProperty("abc", “test");

prop.store(out, “–test–");

out.close();

2.直接在jsp中操作,通过jsp内置对象获取可操作的绝对地址。

例:

// jsp页面

String path = pageContext.getServletContext().getRealPath("/");

String realPath = path+"/WEB-INF/classes/abc.properties";

//java 程序

InputStream in = getClass().getClassLoader().getResourceAsStream("abc.properties"); // abc.properties放在webroot/WEB-INF/classes/目录下prop.load(in);

in.close();

OutputStream out = new FileOutputStream(path); // path为通过页面传入的路径

prop.setProperty("abc", “abcccccc");

prop.store(out, “–test–");

out.close();

3.只通过Java程序操作资源文件

InputStream in = new FileInputStream("abc.properties"); // 相对路径,项目下的路径

OutputStream out = new FileOutputStream("abc.properties");

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值