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. db_install.rsp dbca.rsp netca.rsp 详解【转】

    db_install.rsp详解 #################################################################### ## Copyright(c ...

  2. 解锁Renderbus客户端使用新技巧----快速渲染效果图篇

    度娘说,效果图最基本的要求就是:应该符合事物的本身尺寸,不能为了美观而使用效果把相关模型的尺寸变动,那样的效果图不但不能起到表现设计的作用,反而成为影响设计的一个因素.可见高效渲染效果图是都是当下我们 ...

  3. Flutter 布局类组件:流式布局(Wrap和Flow)

    前言 把超出屏幕显示范围会自动折行的布局称为流式布局.Flutter中通过Wrap和Flow来支持流式布局,将Row换成Wrap后溢出部分则会自动折行. Wrap 接口描述 Wrap({ Key ke ...

  4. 微信小程序API交互的自定义封装

    目录 1,起因 2,优化成果 3,实现思路 4,完整代码 1,起因 哪天,正在蚂蚁森林疯狂偷能量的我被boss叫过去,告知我司要做一个线上直播公开课功能的微信小程序,博主第一次写小程序,复习了下文档, ...

  5. Java 使用 commons-fileupload 实现文件上传工具类

    依赖包 文件上传可以使用 Apache 文件上传组件, commons-fileupload, 它依赖于 commons-io commons-io.jar: https://repo1.maven. ...

  6. 系统吞吐量与QPS/TPS

    QPS/TPS QPS:Queries Per Second意思是"每秒查询率",是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. ...

  7. 【Spring】Spring的数据库开发 - 1、Spring JDBC的配置和Spring JdbcTemplate的解析

    Spring JDBC 文章目录 Spring JDBC Spring JdbcTemplate的解析 Spring JDBC的配置 简单记录-Java EE企业级应用开发教程(Spring+Spri ...

  8. Java并发/多线程-CAS原理分析

    目录 什么是CAS 并发安全问题 举一个典型的例子i++ 如何解决? 底层原理 CAS需要注意的问题 使用限制 ABA 问题 概念 解决方案 高竞争下的开销问题 什么是CAS CAS 即 compar ...

  9. dblink查找对应的目标端session

    v$session试图中process字段代表的是客户端所在机器的进程号 例如我使用toad连接数据库,查询到的process即toad的进程号 SELECT process FROM V$SESSI ...

  10. Linux中LPC、RPC、IPC的区别

    其实这玩意儿就是纸老虎,将英文缩写翻译为中文就明白一半了. IPC:(Inter Process Communication )跨进程通信 这个概念泛指进程之间任何形式的通信行为,是个可以拿来到处套的 ...