一.得到绝对路径

本人用到的不多,就列举常用的。

以上2种可读取固定配置文件可用得到绝对路径

1.System.getProperty("user.dir");

这个东西局限性十分高

一定要在运行了web程序并且配置了环境变量的环境中才可以得到,例如现在很多环境用myeclipse编写的自带jdk,结果路基就根本找不到。

顺便把System的东西都拿出来

public static void main(String[] args){

System.out.println("Java运行时环境版本:/n"+System.getProperty("java.version"));

System.out.println("Java 运行时环境供应商:/n"+System.getProperty("java.vendor"));

System.out.println("Java 供应商的URL:/n"+System.getProperty("java.vendor.url"));

System.out.println("Java安装目录:/n"+System.getProperty("java.home"));

System.out.println("Java 虚拟机规范版本:/n"+System.getProperty("java.vm.specification.version"));

System.out.println("Java 类格式版本号:/n"+System.getProperty("java.class.version"));

System.out.println("Java类路径:/n"+System.getProperty("java.class.path"));

System.out.println("加载库时搜索的路径列表:/n"+System.getProperty("java.library.path"));

System.out.println("默认的临时文件路径:/n"+System.getProperty("java.io.tmpdir"));

System.out.println("要使用的 JIT 编译器的名称:/n"+System.getProperty("java.compiler"));

System.out.println("一个或多个扩展目录的路径:/n"+System.getProperty("java.ext.dirs"));

System.out.println("操作系统的名称:/n"+System.getProperty("os.name"));

System.out.println("操作系统的架构:/n"+System.getProperty("os.arch"));

System.out.println("操作系统的版本:/n"+System.getProperty("os.version"));

System.out.println("文件分隔符(在 UNIX 系统中是“/”):/n"+System.getProperty("file.separator"));

System.out.println("路径分隔符(在 UNIX 系统中是“:”):/n"+System.getProperty("path.separator"));

System.out.println("行分隔符(在 UNIX 系统中是“/n”):/n"+System.getProperty("line.separator"));

System.out.println("用户的账户名称:/n"+System.getProperty("user.name"));

System.out.println("用户的主目录:/n"+System.getProperty("user.home"));

System.out.println("用户的当前工作目录:/n"+System.getProperty("user.dir"));

}

2.class.getResource("/").getPath());

tempPath.append(Mail.class.getResource("/").getPath());//获取当前class所在的路径

if(tempPath.length()>0){//如果路径长度>0则路径存在

tempPath.deleteCharAt(0);

tempPath.delete(tempPath.length()-8, tempPath.length());//删除掉/classes

}

这东西很十分好用,但是这个只能读单域的web服务器中的程序才可以得到,多域的无法得到。

我用到过的中间件。单域的tomcat  jboss  多域的weblogic  WebSphere

在Servlet或者一些框架的action中得到绝对路径

3.servlet.getServletContext().getRealPath("/");

struts2 中ServletActionContext.getServletContext().getRealPath("/");

关于为什么要得绝对路径,那是因为读取web项目的一些外面类无法读取相对路径,比如说我们常用的读取xml

很多情况自己些的配置的东西是在web项目加载是启动的,而不是在servlet中读取的。

比如最常见的jdom方式读取xml。

1.用fileInputstream 读取 一般xml  这种方式只能读取绝对路径

例如下面的读取邮件配置的xml文件

一般自定义xml

[c-sharp] view

plaincopy

myzqf88@163.com

111

smtp.163.com

java代码

[java] view

plaincopy

SAXBuilder sb =newSAXBuilder();// 新建立构造器

ocument doc1 = sb.build(newFileInputStream(path));

Element root1=doc1.getRootElement();

String smtpusername="";//用户名

String smtppwd="";//密码

String smtpserver="";//邮件服务器域名

List list1=root1.getChildren("address");

for(intii=0;ii

Element element=(Element)list1.get(ii);

smtpusername=element.getChildText("smtpusername");

smtppwd=element.getChildText("smtppwd");

smtpserver=element.getChildText("smtpserver");

}

1.用InputStream 读取 一般xml  这种方式读取相对路径

jdm层次结构的xml

[c-sharp] view

plaincopy

12

select id,title,committime,currstep,filenumber from jcewk_gwgl.dbo.handle where acceptuserid =? and (currstep ='待批转联合发文'or currstep='重新批转联合发文')

]]>

12

java

[c-sharp] view

plaincopy

publicstaticfinal String DNDI ="/dndi.xml";//包含各业务逻辑的SQL语句

//  其中/表示相对于web项目classes目录下

privatevoidconfig() throws XMLException {

services = newHashMap();

InputStream is=this.getClass().getResourceAsStream(Constants.DNDI);

xml = XMLUtil.getInsance(is);

List serviceLists = xml.getAllElements("/data-services/service");

Element each = null;

String name = null;

for(Iterator all = serviceLists.iterator(); all.hasNext(); ) {

each = (Element) all.next();

name = each.getAttributeValue("name").trim();

if(services.containsKey(name))

thrownewXMLException("重复的配置:name = "+ name);

services.put(name, this.get_a_dndivo(each));

}

}

privateDndiVO get_a_dndivo(Element each) {

DndiVO dndiVO = newDndiVO();

dndiVO.setSql(each.getChildTextTrim("sql"));//得到sql语句

List params= each.getChildren("param-type");//得到对应的数据连接池上线

for(Iterator iter =params.iterator(); iter.hasNext(); ) {

Element item = (Element) iter.next();

dndiVO.addParams(item.getTextTrim());

}

returndndiVO;

}

java读取xml路径问题_java 中读取xml 和绝对路径相关推荐

  1. java中文件读取方式的顺序_java中读取文件的方式

    java中读取文件的方式 经常遇到java中读取文件的方式,有时候需要指定编码,有时候不需要指定编码,被搞的挺晕的,抽时间整理了一下java读取文件的方式,主要是对字符型的处理,二进制的暂时不考虑. ...

  2. java xml格式验证_Java中对XML文件的校验

    Java中使用dtd校验xml文件: 1.定义一个校验类CheckXML类: import org.w3c.dom.Document; import org.xml.sax.EntityResolve ...

  3. java xml 实体类_java中的xml与实体类之间的映射

    实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...

  4. java常见的报错_Java中常见的错误有哪些?

    原标题:Java中常见的错误有哪些? 1.java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 原因: 1.对系统所访 ...

  5. java 静态资源变量_Java中读取配置文件中的内容,并将其赋值给静态变量的方法...

    项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用.写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用, 使用很方便,比如判断某个对象是否为空的方式Obje ...

  6. java读文件几种方式_java中读取文件的方式有哪几种

    java中读取文件的方式有哪几种 发布时间:2020-06-19 13:36:48 来源:亿速云 阅读:135 作者:鸽子 读取文件有多种方式,基于传统的输入流方式或基于nio的Buffer缓冲对象和 ...

  7. java 读文件 二进制_JAVA中读取文件(二进制,字符)内容的几种方法总结

    JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代码,需要的可以直接复制使用 public cla ...

  8. java 输出文件到mac路径_Java 中几种获取文件路径的方式

    原标题:Java 中几种获取文件路径的方式 1. 前言 Java开发中我们经常要获取文件的路径,比如读取配置文件等等.今天我们就关于文件的路径和如何读取文件简单地探讨一下. 2. 文件的路径 文件的路 ...

  9. java获取项目中的路径_java中几种获取项目路径方式

    转自http://caodaoxi.iteye.com/blog/1234805 在jsp和class文件中调用的相对路径不同. 在jsp里,根目录是WebRoot 在class文件中,根目录是Web ...

最新文章

  1. C++ 多线程:互斥对象 lock_gurad
  2. INFO ipc.Client:Retrying connect to server 9000
  3. matlab小波变换边缘检测,在matlab 下 实现 用小波变换对图像进行边缘检测 程序代码...
  4. centos6.9配置安装python2.7及pip
  5. jquery链式写法 java_jQuery链式操作
  6. HMM学习(3)-Patterns generated by a hidden process
  7. java 添加一个线程、创建响应的用户界面 。 演示示例代码
  8. PHP权重算法-用于游戏根据权限来随机物品
  9. 模切ERP和免费OA系统是互相结合提高效率
  10. mysql 多实例 独立配置文件_三、安装配置多实例MYSQL5.6-多独立配置文件方法
  11. 作为一个死忠粉,我的 IntelliJ IDEA 一直都是这样来设置的,效果很棒!
  12. python base64加解密
  13. golang下的条件编译
  14. 服务器测试文档格式,服务器测试文档格式
  15. matlab绘制正弦波
  16. idea中html导入背景图片,Intellij IDEA代码框使用自定义背景图片
  17. 基于STM32F407的ADC解析-ADC1多通道扫描模式电压采集实验(启用DMA传输数据)
  18. linphone 智能带宽分配
  19. 自定义店招应该具有的基本功能
  20. 8421码,5421码,2421码,余三码的区别

热门文章

  1. 软件设计师学习1——计算机系统知识
  2. 业界分享 | Embedding技术在商业搜索与推荐场景的实践
  3. c语言数组插入一个数字 移位,如何将一个数组的元素循环左移?
  4. c语言机考答案,全国计算机等级考试C语言上机试题题库(内附答案)
  5. 2021年Tiktok用户增长和使用模式?
  6. TikTok玩法攻略总结,从输出内容再到变现,结尾送干货!
  7. php采集扩展,PHP扩展生成器
  8. linux 查看权限命令行,【linux】与 用户、权限 有关的常用命令
  9. 面试准备每日五题:C++(十)——mapset、set查找、迭代器实现、set低层原理
  10. c++连接mysql的中文编码问题