我们在以前讨论过在Web工程不能采用Java工程原先的读取方式,即创建一个文件流(FileInputStream)并给出一个文件目录(从src开始找一直找到你要读取文件的目录),这种的方式是不可行的。假如我们是在一个Servlet对象中取读取文件的话,我们就可以获取到ServletContext对象,然后通过getRealPath方法获取文件的实际路径,进而取创建文件流对象来操作文件,具体代码如下所示:

//获取文件的真实路径
String filePath = this.getServletContext().getRealPath("/WEB-INF/classes/com/servlet/jdbc3.properties");
//构建流对象
FileInputStream fis = new FileInputStream(filePath);

如果是在一个普通的Java类文件中,我们有时候也要它来操作文件,比如我们自己封装的DBUtils,里面需要从配置文件中读取数据库的相关配置信息,用户名、密码等,但是,它是不能获取到ServletContext对象的,也许有的朋友可能会想,你传入一个ServletContext对象进去不就可以了。但是这样做的话就不太合理,因为WEB层就侵入到了数据访问层,就会耦合在一起,不符合软件设计高内聚,低耦合的思想。所以这种方式是不推荐的,那么这种方式不行,那该怎么办呢?所以,我们可以通过下面的方式进行读取文件,来解决这一个问题。

1.读取src目录下的文件

①文件目录

②读取示例代码:

package com.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; public class JdbcUtils {
public static void readFile1() throws IOException {
// 通过class类的getResourceAsStream方法来进行读取jdbc1.properties,它读的是当前类所在的目录即WEB-INF/classes/com/util
InputStream in = JdbcUtils.class.getResourceAsStream("jdbc1.properties");
Properties prop = new Properties();
prop.load(in);
// 从控制台列出prop里面的信息
prop.list(System.out);
     in.close();
}
}

③运行结果:

-- listing properties --

jdbc.driver_class=oracle.jdbc.driver.OracleDriver
jdbc.connection.username=root
jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.connection.password=root

2.读取src的包目录下的文件

①文件目录

②读取示例代码:

package com.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; public class JdbcUtils {
public static void readFile2() throws IOException {
// 通过类装载器来进行读取jdbc2.properties(文件不宜不过大,因为是通过加载类的方式去读),它读取的是目录是WEB-INF/classes
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc2.properties");
Properties prop = new Properties();
prop.load(in);
// 从控制台列出prop里面的信息
prop.list(System.out);
     in.close();
}
}

③运行结果:

-- listing properties --
jdbc.driver_class=oracle.jdbc.driver.OracleDriver
jdbc.connection.username=root
jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.connection.password=root

至此在web中普通Java类读取文件的方式描述完毕,有不足的地方,希望大家多多提意见!

在Web工程中,普通Java类如何读文件的更多相关文章

  1. 第7章—SpringMVC高级技术—不用web.xml,而使用java类配置SpringMVC

    不用web.xml,而使用java类配置SpringMVC DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置 ...

  2. Tomcat热部署,Web工程中线程没有终止

    近期项目中,用 jenkins 热部署 web工程时,发现工程中静态持有的线程(将ScheduledExecutorService定时任务存储在静态Map中),导致不定时出现数据库访问事务关闭异常,如 ...

  3. web工程中的各种路径(eclipse开发)

    目前遇到的 web 工程中要写url和路径的文件有 webContent中.jsp/.html :action src中的servlet类 : 映射地址.重定向.请求转发.访问资源文件(webCont ...

  4. 如何在Web工程中实现任务计划调度

    转载自: http://www.oschina.net/question/146385_37793?sort=time 下面就Servlet侦听器结合Java定时器来讲述整个实现过程.要运用Servl ...

  5. web工程中URL地址的推荐写法

    三.web工程中URL地址的推荐写法 使用c标签<c:url value="" /> 会自动添加项目名 -> value中的值 前面要加 “/” 在JavaWeb ...

  6. web工程中URL地址的写法

    在开发中我们不可避免的要碰到许多需要写URL地址的情况,这常常让我们感到头疼.下面笔者推荐一种简单的做法.URL地址分为绝对路径和相对路径两种.相对路径又分为相对资源路径和相对根路径.显然绝对路径在开 ...

  7. Java Native Interfce三在JNI中使用Java类的普通方法与变量

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 前面我们学习了如何在JNI中通过参数来使用J ...

  8. Oracle数据库中调用Java类开发存储过程、函数的方法

    Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...

  9. [原创]Android系统中常用JAVA类源码浅析之HashMap

    由于是浅析,所以我只分析常用的接口,注意是Android系统中的JAVA类,可能和JDK的源码有区别. 首先从构造函数开始, /** * Min capacity (other than zero) ...

随机推荐

  1. 关于Go语言daemon启动的方法.

    昨天搞了个文件共享的小程序,遇见了意见蛋疼的事,就是启动之后终端不能关闭,不然程序也会随着关闭. 我的解决方法: nohup ./httpserver & nohup这个命令能够把程序放后台执 ...

  2. Android---Handler消息处理机制

    搞Android的人都知道.android是不同意你在子线程中更新UI操作的.这主要出于线程安全方面的考虑.通常的做法是在主线程中创建一个Handler对象,在子线程中创建一个Message对象.该M ...

  3. 3.3v转5v开关电源芯片LM2731

    方案一 输入3.3(可为2.7~14v):输出5v,700ma.已经过实际验证. 其中:C1,C2为贴片陶瓷电容,Cf也为贴片陶瓷电容,L1为6.8uH 电感 输出值只和R1,R2的值有关,但手册中又 ...

  4. C语言 fork

    /* *@author cody *@date 2014-08-12 *@description */ /* #include <sys/types.h> #include <uni ...

  5. JUC组件扩展(二)-JAVA并行框架Fork/Join(三):在任务中抛出异常

    在java当中,异常一共分为两种.一种是运行时异常,一种是非运行是异常. 非运行时异常:这些异常必须在方法上通过throws子句抛出.或者在方法体内进行try{…}catch{…}来捕获异常. 运行时 ...

  6. rabbitmq文章源

    网易杭研后台技术中心的博客 rabbitmq topic简单demo http://blog.csdn.net/cugb1004101218/article/details/21243927?utm_ ...

  7. Excel累加上一行的数值

    默认一拖是每一行+1,现在想加任意: =A1+X 然后一拖就可以加X了.

  8. poj1182食物链--并查集

    动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.有人用两种说 ...

  9. gm: error while loading shared libraries: libpng15.so.15: cannot open shared object file: No such file or directory

    安装gm库产生问题 解决方案: # cat /etc/ld.so.confinclude ld.so.conf.d/*.conf# echo "/usr/local/lib" &g ...

  10. 使用AccessibilityService实现微信自己主动抢红包

    近期要实现微信自己主动抢红包的功能.使用AccessibilityService来开发,这里主要写一下逻辑以及注意点. 注意点 1.搜索keyword 我们实现某个功能比方点击等须要找到相应的对象然后 ...