在eclipse完成对Java_web项目里面资源文件的读取
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项目里面资源文件的读取的更多相关文章
- idea中maven项目xml资源文件无法读取
解决方法:编辑pom.xml文件 添加如下标签 <build> <resources> <resource> <directory>src/main/j ...
- 以Jar形式为Web项目提供资源文件
以Jar形式为Web项目提供资源文件 http://www.webjars.org/ Web前端使用了越来越多的JS或CSS如jQuery, Backbone.js 和Twitter Bootstra ...
- java 资源文件的读取
Java将配置文件当作一种资源(resource)来处理,并且提供了两个类来读取这些资源,一个是Class类,另一个是ClassLoader类. gradle 项目 项目目录结构 用Class类加载 ...
- 说说Java中的资源文件的读取
最近在看spring的资源获取时发现JDK里存在几种不同方式的资源获取,因比较混乱特地总结起来帮助和我一样混乱的人理解.下面是我项目的类结构图,在 src/main/java 下有两个类 Resour ...
- 文件_ _android从资源文件中读取文件流并显示的方法
======== 1 android从资源文件中读取文件流并显示的方法. 在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样: private ...
- Eclipse 下如何引用另一个项目的资源文件
为什么要这么做?可参考:Eclipse 下如何引用另一个项目的Java文件 下面直接说下步骤:(项目A 引用 项目B的资源文件) 1.右键 项目A,点击菜单 Properties 2.在弹出的框中,点 ...
- eclipse导入maven项目,资源文件位置显示不正确
eclipse导入maven项目后,资源文件位置显示不正确,如下图所示 解决方法: 在resources上右键Build Path,选择Use as Source Folder即可正确显示资源文件
- web项目获取资源文件
首页 博客 学院 CSDN学院 下载 论坛 APP CSDN 问答 商城 活动 VIP会员 专题 招聘 ITeye GitChat GitChat 图文课 写博客 消息 1 评论 关注 点赞 回答 系 ...
- eclipse下建立 android 项目,相关文件夹介绍
今天开始进入ANDROID开发,之前一直做些JAVA的WEBSERVICE之类的文件,第一次从头开始整理ANDROID项目,我会把最近遇到的问题做一一梳理. 现在来说一下建立ANDROID项目后产生的 ...
随机推荐
- JAVA原生mvc实现用户信息的增删查改
笔者最近学完jsp和servlet,于是心血来潮的打算写个简单的用户案例 环境准备: 开发工具eclipse jdk-1.8.0_72 tomcat-9.0.5 前端部分: 1.自己手写了一套样式 2 ...
- SpringBoot配置文件(2)
六.配置文件加载 SpringBoot 启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件 file:./co ...
- 设置.ignore后不生效解决方案
/logs/*.lock /logs/*.log/reports/API_TEST_V*/.idea/ 设置.ignore后不生效解决方案: 在terminal中输入已下几行代码: git rm -r ...
- MySQL select if 查询最后一个主键 id
查询最后一个主键id SELECT IF(MAX(id) IS NULL, 0, MAX(id)) AS maxid FROM users; 查询最小的主键id SELECT IF(MIN(id) I ...
- 【MySQL】centos6中/etc/init.d/下没有mysqld启动文件,怎么办
如果/etc/init.d/下面没有mysqld的话,service mysqld start也是不好使的,同样,chkconfig mysqld on也是不能用 解决办法: 将mysql的mysql ...
- 【Linux】find删除365天以前的文件详细解析
find . -name "*" -mtime +365 -exec rm -rf {} \; -mtime +365 文件被修改的时间,最后一次发生到现在365天 -atime ...
- merge join pg伪代码
Join { get initial outer and inner tuples INITIALIZE do forever { while (outer != inner) { SKIP_TEST ...
- Doge.jpg 的背后是什么,你知道么?
图片,是我们生活中最常见的信息载体,作为一个日常生活中无处不在的事物,我们已经很习惯静态或者动态的图片了.大家也了解静态图片主要是jpg/png格式,动态图片主要为 gif.那你有没有过一瞬间的疑惑: ...
- SDNU_ACM_ICPC_2021_Winter_Practice_1st [个人赛] 2021.1.19 星期二
SDNU_ACM_ICPC_2021_Winter_Practice_1st [个人赛] K - Color the ball 题意: 有n个气球,每次都给定两个整数a,b,给a到b内所有的气球涂一个 ...
- Zju1100 Mondriaan
题目描述 有一个m行n列的矩阵,用1*2的骨牌(可横放或竖放)完全覆盖,骨牌不能重叠,有多少种不同的覆盖的方法? 你只需要求出覆盖方法总数mod p的值即可. 输入格式 三个整数数n,m,p,m< ...