Java_web项目的资源文件一般有两种:

一种是存放数据之间有联系的文件,使用xml文件

另一种是存放数据之间没有联系的文件,使用properties文件

这里我们对properties文件读写做示范:

1、首先在eclipse的src目录下创建一个资源文件properties

我们可以看到没有创建file文件的选项,那就选Other

然后点finish就可以了。

文件里面随便放点数据:

url=127.0.0.1
name=root
password=root

之后在src的test包里面创建一个ServletContextDemo2.Java

文件内容如下:

package test;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class ServletContextDemo2
*/
@WebServlet("/ServletContextDemo2") //注意有了这个就不需要往web.xml文件里面添加路径映射
public class ServletContextDemo2 extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//路径上第一个斜杠/相对于项目day02的相对路径
InputStream in = this.getServletContext().getResourceAsStream("/build/classes/db.properties");
//FileInputStream in = new FileInputStream("classes/db.properties");
Properties pro = new Properties();
pro.load(in); //这个文件的值会以map的形式存放 String url = pro.getProperty("url");
String name = pro.getProperty("name");
String password = pro.getProperty("password"); System.out.println(url);
System.out.println(name);
System.out.println(password);
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }

要特别注意一下这一条语句:

InputStream in = this.getServletContext().getResourceAsStream("/build/classes/db.properties");

这个文件路径可不是你看到的路径,什么意思呢?

我们在src目录下创建的db.properties,但是我们的项目发布之后是没有src这个目录的。所以你可不能把路径写成src/db.properties

那么我们怎么看自己项目发布之后的路径呢?

打开项目属性:

到这里大家应该知道了为什么路径要写成

/build/classes/db.properties  东西了吧!

如果你想要在一个Java包里面创建资源文件,之后访问。那就把路径改成

/build/classes/包/db.properties

注意:

如果上面的不行,那就把文件地址换成

/WEB-INF/classes/包/db.properties

也就是把build都换成WEB-INF

不知道怎么回事,之前build使用谷歌浏览器可以,但是又不行了(我就搞了搞其他东西,又回来试了试,就不行了)。

换成WEB-INF之后,你使用谷歌浏览器访问可能会抛出

java.lang.NullPointerException
java.util.Properties$LineReader.readLine(Properties.java:434)
java.util.Properties.load0(Properties.java:353)
java.util.Properties.load(Properties.java:341)
test.ServletContextDemo2.doGet(ServletContextDemo2.java:86)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

但是换成IE浏览器(window10自带)可以。我算是服了

不知道谷歌浏览器怎么回事,一脸懵

好像是不能在原网页上刷新,你可以试一试重新打开一个页面

---------------------------------------------------------分隔------------------------------------------------

你可以通过类装载器方式读取资源文件,这样是没有问题的,IE、谷歌都可以 ,具体见:

Java_web项目中在Java文件里面通过类装载器对资源文件读取

你也可以得到文件发布之后的绝对路径,这样的话还可以得到文件名

改一下ServletContext.java文件内容

//package test;
//
//import java.io.FileInputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.util.Properties;
//
//import javax.servlet.ServletException;
//import javax.servlet.annotation.WebServlet;
//import javax.servlet.http.HttpServlet;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
///**
// * Servlet implementation class ServletContextDemo2
// */
//@WebServlet("/ServletContextDemo2") //注意有了这个就不需要往web.xml文件里面添加路径映射
//public class ServletContextDemo2 extends HttpServlet {
// private static final long serialVersionUID = 1L;
//
// /**
// * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
// */
// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// // TODO Auto-generated method stub
// //路径上第一个斜杠/相对于项目day02的相对路径
//// String path = this.getServletContext().getRealPath("/build/classes/db.properties");
//// FileInputStream in = new FileInputStream(path);
//// //文件路径
//// System.out.println(path);
//// String file_name = path.substring(path.lastIndexOf("\\")+1);
//// //文件名
//// System.out.println(file_name);
//
// InputStream in = this.getServletContext().getResourceAsStream("/build/classes/db.properties");
// Properties pro = new Properties();
// pro.load(in); //这个文件的值会以map的形式存放
//
// String url = pro.getProperty("url");
// String name = pro.getProperty("name");
// String password = pro.getProperty("password");
//
// System.out.println(url);
// System.out.println(name);
// System.out.println(password);
// }
//
// /**
// * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
// */
// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// // TODO Auto-generated method stub
// doGet(request, response);
// }
//
//}
package test; import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class ServletContextDemo2
*/
@WebServlet("/ServletContextDemo2") //注意有了这个就不需要往web.xml文件里面添加路径映射
public class ServletContextDemo2 extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//路径上第一个斜杠/相对于项目day02的相对路径
String path = this.getServletContext().getRealPath("/build/classes/db.properties");
FileInputStream in = new FileInputStream(path);
Properties pro = new Properties();
pro.load(in); //这个文件的值会以map的形式存放
//文件路径
System.out.println(path);
//文件名
String file_name = path.substring(path.lastIndexOf("\\")+1);
System.out.println(file_name); String url = pro.getProperty("url");
String name = pro.getProperty("name");
String password = pro.getProperty("password"); System.out.println(url);
System.out.println(name);
System.out.println(password);
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }

在eclipse完成对Java_web项目里面资源文件的读取的更多相关文章

  1. idea中maven项目xml资源文件无法读取

    解决方法:编辑pom.xml文件 添加如下标签 <build> <resources> <resource> <directory>src/main/j ...

  2. 以Jar形式为Web项目提供资源文件

    以Jar形式为Web项目提供资源文件 http://www.webjars.org/ Web前端使用了越来越多的JS或CSS如jQuery, Backbone.js 和Twitter Bootstra ...

  3. java 资源文件的读取

    Java将配置文件当作一种资源(resource)来处理,并且提供了两个类来读取这些资源,一个是Class类,另一个是ClassLoader类. gradle 项目 项目目录结构  用Class类加载 ...

  4. 说说Java中的资源文件的读取

    最近在看spring的资源获取时发现JDK里存在几种不同方式的资源获取,因比较混乱特地总结起来帮助和我一样混乱的人理解.下面是我项目的类结构图,在 src/main/java 下有两个类 Resour ...

  5. 文件_ _android从资源文件中读取文件流并显示的方法

    ======== 1   android从资源文件中读取文件流并显示的方法. 在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样: private ...

  6. Eclipse 下如何引用另一个项目的资源文件

    为什么要这么做?可参考:Eclipse 下如何引用另一个项目的Java文件 下面直接说下步骤:(项目A 引用 项目B的资源文件) 1.右键 项目A,点击菜单 Properties 2.在弹出的框中,点 ...

  7. eclipse导入maven项目,资源文件位置显示不正确

    eclipse导入maven项目后,资源文件位置显示不正确,如下图所示 解决方法: 在resources上右键Build Path,选择Use as Source Folder即可正确显示资源文件

  8. web项目获取资源文件

    首页 博客 学院 CSDN学院 下载 论坛 APP CSDN 问答 商城 活动 VIP会员 专题 招聘 ITeye GitChat GitChat 图文课 写博客 消息 1 评论 关注 点赞 回答 系 ...

  9. eclipse下建立 android 项目,相关文件夹介绍

    今天开始进入ANDROID开发,之前一直做些JAVA的WEBSERVICE之类的文件,第一次从头开始整理ANDROID项目,我会把最近遇到的问题做一一梳理. 现在来说一下建立ANDROID项目后产生的 ...

随机推荐

  1. Mac Navicat premium 12 连接mysql8.0.21出现 'caching_sha2_password' 解决方案

    1.通过命令 select user,plugin from user where user='root'; 我们可以发现加密方式是caching_sha2_password. 2.  修改查看加密方 ...

  2. 【Java】流程控制 - 顺序结构、 选择(分支)结构(单分支、双分支、多分支、嵌套)、循环结构(for、while、do...while)、跳转语句(break、continue)

    流程控制语句结构 文章目录 流程控制语句结构 一. 顺序结构 1. 输出语句 2. 输入语句 3.code 二.复合语句 三. 分支结构 1. 条件判断 1.单分支结构 2.双分支结构 3.多分支结构 ...

  3. 【MySql】[ERROR] Can't read from messagefile '/usr/share/mysql/english/errmsg.sys'

    [root@zhang bin]# ./mysql_install_db --datadir=/usr/local/mysql/mydata/data/ 2018-08-18 03:09:14 [WA ...

  4. LeetCode653. 两数之和 IV - 输入 BST

    题目 直接暴力 1 class Solution { 2 public: 3 vector<int>ans; 4 bool findTarget(TreeNode* root, int k ...

  5. 【老孟Flutter】如何提高Flutter应用程序的性能

    首先 Flutter 是一个非常高性能的框架,因此大多时候不需要开发者做出特殊的处理,只需要避免常见的性能问题即可获得高性能的应用程序. 重建最小化原则 在调用 setState() 方法重建组件时, ...

  6. USB充电限流芯片,输出短路关闭,过压关闭

    PW1503,PW1502是超低RDS(ON)开关,具有可编程的电流限制,以保护电源源于过电流和短路保护.它具有超温保护以及反向闭锁功能. PW1503,PW1502采用薄型(1毫米)5针薄型SOT2 ...

  7. JSAAS BPM快速开发平台-企业管理软件,专属你的企业管家

    前言: 2020年,企业该如何去选择合适的信息化规划管理软件,基于目前社会软件杂乱无章,选择企业业务贴近的管理软件,甚是困难,市场上一些大品牌公司的产品,定位高,价格高,扩展难,等等一系列的问题,对于 ...

  8. WIFI 国家码和信道划分

    前言 网上百度了很多资料,都没有找到国家码对应支持哪些信道的资料,无奈只能qiang到谷歌,分享给大家完整的WIFI 国家码和信道划分. 安卓WIFI国家码的影响 android中设置wifi国家码的 ...

  9. 解决 browser-sync start --server --files 文件不能同步的问题!

    解决 browser-sync start --server --files 文件不能同步的问题! 请看我的源命令: browser-sync start --server --file 'test2 ...

  10. Python+Selenium+Unittest实现PO模式web自动化框架(1)

    1.什么是PO模式? PO是Page Object的缩写 PO模式是自动化测试项目开发实践的最佳设计模式之一,讲页面定位和业务操作分开,也就是把对象的定位和测试脚本分开,从而提供可维护性. 主要有以下 ...