Servlet总结二(文件路径)
Servlet总结二(文件路径)
前言
前面我们说过
ServletContext表示的是web容器中的上下文,下面我们也是用到ServletContext中的方法读取文件
读取WebRoot文件下的文件
我们知道当我们将项目部署到
Tomcat服务器中时,项目中的文件路径其实就是在Tomcat中的文件路径,所有的项目都是存储在webapps下的,我们可以看到webaapps下有两个文件夹(WEB-INF,META-INF),这两个其实就是项目中webRoot下的两个文件夹。
public String getRealPath(String path)为给定虚拟路径返回包含实际路径的String
//获取ServletContext的对象
ServletContext context = this.getServletContext();
//context.getRealPath("/")获取项目的根目录的绝对路径(webRoot的绝对路径)
//得到了webRoot的绝对路径,下面只要再接着写其他文件的路径即可
File file = new File(context.getRealPath("/")
+ "\\WEB-INF\\lib\\file.txt");
if (file.exists()) {
System.out.println("文件存在");
} else {
System.out.println("文件不存在,现在我们创建一个");
try {
file.createNewFile();// 创建一个新的文件
} catch (IOException e) {
e.printStackTrace();
}
}
InputStream getResourceAsStream(String path)根据传入的路径文件,返回一个InputStream对象
// 第一个"/"是表示webRoot的根目录,通过这个函数可以不用指定绝对路径就可以构造一个输入字节流
InputStream stream = context
.getResourceAsStream("/WEB-INF/lib/file.txt");
// 通过InputStreamReader将字节流转换为字符流,然后创建缓冲字符流读取文件
BufferedReader reader = new BufferedReader(
new InputStreamReader(stream));
try {
System.out.println(reader.readLine());
} catch (IOException e) {
System.out.println("文件没有成功读取");
e.printStackTrace();
}
注意:这个函数中的path传入的第一个
"/"就表示根目录,在eclipse项目中表示webRoot的绝对路径,在Tomcat下的webapps表示项目名称的绝对路径,因此在下面的WEB-INF,META-INF文件夹下的文件只需要在后面继续添加即可
读取src下的class文件
前面我们获取的
webRoot下的文件路径,但是如果我们想要获取src下的文件,那么我们要如何获取呢。
我们仔细看看
Tomcat下的文件,可以发现在每一个WEB-INF下都有一个classes,这个就是相当于Tomcat下的src,因此我们利用上面得到的路径稍加修改就可以轻易的得到其中的文件路径
下面我们读取
src文件夹下的file.txt中的内容,代码如下:
// 获取ServletContext对象
ServletContext context = this.getServletContext();
// 这个是获取项目下的src文件夹下的file.txt文件
File file = new File(context.getRealPath("/")
+ "\\WEB-INF\\classes\\file.txt");
BufferedReader reader = null;
if (file.exists()) {
System.out.println("文件存在,现在可以读取");
try {
// 创建缓冲流对象,实现读取文件
reader = new BufferedReader(new FileReader(file));
try {
// 输出第一行内容
System.out.println(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
System.out.println("文件不存在");
} finally {
if (reader != null) {
try {
reader.close(); // 如果reader不是空,就关闭
} catch (IOException e) {
System.out.println("文件关闭失败");
}
}
}
} else {
System.out.println("文件不存在,现在开始创建一个");
try {
file.createNewFile();// 创建一个
} catch (IOException e) {
System.out.println("没有创建成功");
}
}
Servlet总结二(文件路径)的更多相关文章
- JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址
在写java程序时不可避免要获取文件的路径...总结一下,遗漏的随时补上 1.可以在servlet的init方法里 String path = getServletContext().getRealP ...
- C# 一些知识点总结(二)_路径类,编码类,文件类...
Path 类:路径类path.GetFileName("文件路径")//获取完整文件名,包括文件名和文件拓展名Path.GetFileNameWithoutExtension(&q ...
- java web项目中 获取resource路径下的文件路径
public GetResource{ String path = GetResource.class.getClassLoader().getResource("xx/xx.txt&quo ...
- javaweb学习之Servlet开发(二)
javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...
- Servlet上传文件
Servlet上传文件 1.准备工作 (1)利用FileUpload组件上传文件,须要到apache上下载commons-fileupload-1.3.1.jar 下载地址:http://common ...
- Java文件路径
几大常用的方法 Class.getResource("") 返回的是当前Class这个类所在包开始的位置 getClassLoader().getResource(" ...
- Java Web学习总结(3)Servlet(二)
一,Servlet访问URL映射配置 由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml ...
- 专攻知识小点——回顾JavaWeb中的servlet(二)
续前篇... ServletConfig对象 Servlet的配置对象,ServletConfig对象作用域只能在一个Servlet类中使用.每个Servlet类都维护一个ServletConfig对 ...
- Oracle数据库文件路径变更
环境:RHEL 6.4 + Oracle 11.2.0.3 情景一:只是部分普通数据文件迁移,可以在线操作. 1.将对应表空间offline,移动数据文件到新路径 2.数据文件alter databa ...
随机推荐
- 多重DES
背景:单重DES在穷举攻击下相对比较脆弱 理论依据:以双重DES为例 加密:C = E(K2,E(K1,P)) 解密:P = D(K1,D(K2,C)) 要证明多重加密有效,就要证明不存在K3 ...
- TCP的定时器系列 — 超时重传定时器
主要内容:TCP定时器概述,超时重传定时器.ER延迟定时器.PTO定时器的实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd Q:一条TCP连接会使用 ...
- Python学习笔记 - dict和set
dict #!/usr/bin/env python3 # -*- coding: utf-8 -*- #dict >>> d = {'Michael': 95, 'Bob': 75 ...
- Libgdx1.5.3发布
- API更改:TextField#setRightAlign改成TextField#setAlignment - I18NBundle 现在兼容Android2.2 - 修复GWT反射包括3D粒子 ...
- 学习pthreads,使用互斥量进行同步
在进行多线程编程时,我们总会遇到全局变量和数据结构的问题,这是多线程之间进行通信的问题.如果多个线程同时读写一个全局变量,那么会造成竞争或者出错.为了解决这一问题,我们需要对全局数据进行,使用互斥量实 ...
- [Django] 单元测试小记
从前很少写单元测试了,特别是web应用.最近不知不觉喜欢起来这个事情了,发现单元测试对于软件的模块,正交性有很大促进作用,因为函数,模块写的不合理,单元测试写起来就麻烦的多呀.公司的项目一直都是用Dj ...
- Xcode 下cocos-2dx 环境搭建
一.Cocos2d-x简介 Cocos2d-x是一个开源的移动2D游戏框架,MIT许可证下发布的,这是一个C++ Cocos2d-iPhone项目的版本. Cocos2d-X发展的重点是围绕Cocos ...
- [查阅]Dalvik opcodes
Dalvik opcodes Dalvik opcodes Author: Gabor Paller Vx values in the table denote a Dalvik register. ...
- LayoutInflater和inflate的用法,有图有真相
1.概述 有时候在我们的Activity中用到别的layout,并且要对其组件进行操作,比如: A.acyivity是获取网络数据的,对应布局文件为A.xml,然后需要把这个数据设置到B.xml的组件 ...
- mysql进阶(十二)常见错误汇总
原因:外键名不能重复