JSP学习笔记(7)-JSP的文件操作
1.File类
File对象用来获取文件本身的一些信息,例如文件所在目录,文件的长度,文件读写权限等,不涉及文件的读写操作。
创建一个File对象的构造方法有3个:
File(String filename);//filename是文件名或文件的绝对路径
File(String directoryPath,String filename);//文件路径和文件名
File(File f,String filename);使用第一种构造方法创建File对象时,filename是文件名会被认为与当前应用程序在同一个目录中。
File类常用方法
public String getName 获取文件名 public boolean canRead() 判断文件是否可读 public boolean canWrite() 判断文件是否可写 public boolean exists() 判断文件是否存在 public long length() 获取文件的长度(单位是字节) public String getAbsolutePath() 获取文件的绝对路径 public String getParent() 获取文件的父目录 public boolean isFile() 判断文件是否是一个正常文件,而不是目录 public boolean isDirectory() 判断文件是否是一个目录 public boolean isHidden() 判断文件是否是隐藏文件 public long lastModified() 获取文件最后修改的时间(时间从1970年午夜到文件最后修改时刻的毫秒数)
1.1.创建目录
- File对象调用public boolean mkdir()创建一个目录,成功返回true,失败返回false。
1.2.列出目录中的文件
- public String[] list()用字符串形式返回目录下的全部文件
- public File[] listFiles()用File对象形式返回目录下全部文件
1.3.列出指定类型文件
- public String[] list(FilenameFilter obj)用字符串形式返回目录下指定类型的所有文件
- public File[] listFiles(FilenameFilter obj)用File对象返回目录下指定类型的所有文件
1.4.删除文件和目录
- public boolean delete()可以删除当前对象代表的文件或目录;如果是目录,目录必为空;成功返回true。
2.读写文件的常用流
java.io包提供了大量的流类,其中InputStream、OutputStream、Reader、Writer是最重要的四个抽象类。
InputStream类及其子类对象为字节输入流;
OutputStream类及其子类对象为字节输出流;
Reader类及其子类对象为字符输入流;
Writer类及其子类对象为字符输出流。
使用输入流的4个步骤:
(1)设定输入流的源
(2)创建指向源的输入流
(3)让输入流读取源中的数据
(4)关闭输入流
使用输出流的4个步骤:
(1)给出输出流的目的地
(2)创建指向目的地的输出流
(3)让输出流吧数据写入到目的地
(4)关闭输出流
2.1.字节输入流
创建
FileInputStream(String name);
fileInputStream(File file);
//可能出现I/O错误try{
FileInputStream in=new FileInputStream("hello.txt");//创建指向源的输入流
}
catch(IOException e){
System.out.print(e);
}或
File f=new File("hello.txt");//指定输入流的源
try{
FileInputStream in = new FileInputStream(f);//创建指向源的输入流
}
catch(IOException e){
System.out.print(e);
}读取字节
字节输入流的read方法以字节为单位读取源中的数据。
int read() 读取单个字节的数据,返回字节值(0~255之间的一个整数),如未读出字节就返回-1 int read(byte b[]) 读取b.length个字节到字节数组b中,返回实际读取的字节数目,如到达文件的末尾,返回-1 int read(byte b[],int off,int len) 读取len个字节到字节数组b中,并返回实际读取字节数目,如到达文件末尾,返回-1;off指定b中存放读取数据的开始位置 关闭流
使用完之后应该关闭流,close()
2.2.字节输出流
创建
FileOutputStream(String name);
FileOutputStream(File file);try{
//创建指向目的地的输出流
FileOutputStream out=new FileOutputStream("hello.txt");
}
catch(IOException e){
System.out.peint(e);
} 或 File f=new File("hello.txt");
try{
FileOutputStream out=new FileOutputStream(f);
}
catch(IOException e){
System.out.print(e);
}具有刷新功能的输出流FileOutputStream(String name,boolean append);
FileOutputStream(File file,boolean appemd);如果参数append取值为true,输出流不会刷新指向的文件(假设文件已存在),输出流的write方法将从文件的末尾开始向文件写入数据;参数append取值false,输出流将刷新所指向的文件(假设文件已存在)。
写字节
字节输出流的write方法以字节单位向目的地写数据:
void write(int n) 向目的地写数据 void write(byte b[]) 向目的地写入单个字节 void write(byte b[],int off,int len) 从给定字节数组中起始于偏移量off处获取len个字节写到目的地 关闭流
close();
2.3.字符流
字节流是使用字节读取数据,不能很好的操作Unicode字符,比如汉字在文件中占两个字节,如果使用字节流,可能会出现乱码。这里我们就要使用字符流了。
FileReader文件字符输入流:
FileReader(String filename);
FileReader(File file);
FileWriter文件字符输出流:
FileWriter(String filename);
FileWriter(File file);
FileWriter(String filename,boolean append);
FileWriter(File file,boolean append);
FileReader和FileWriter分别是Reader和Writer的子类。
字符输入流和输出流的read和write方法使用字符数组读写数据,就是以字符为基本单位处理数据。
2.4.缓冲流
BufferedReader和BufferedWriter类创建的对象称为缓冲输入、输出流,二者增强了读写文件的能力。他们的源和目的地必须是字符输入流和字符输出流。通过字符输入流和BufferedReader的配合使用,使用readLine()方法可实现按行读取数据,字符输入流原本不能按行读取数据。
BufferedReader和BufferedWriter的构造方法:
BufferedReader(Reader in);
BufferedWriter(Writer out);
FileReader in = new FileReader("hi.txt");
BufferedReader buin = BufferedReader(in);
String strLine = buin.readLine(); FileWriter out = new FileWriter("hi.txt");
BufferedWriter buout = BufferedWriter(out);
buout.write("pinnsvin",3,4);
//向hi.txt中写入"nsvi"
readLine() 读取文本行 write(String s,int off,int len) 字符串s从off处开始写入len个字符 newLine() 向文件中写入回行符 flush() 刷新缓存 close() 关闭流
3.RandomAccessFile类
RandomAccessFile类不是InputStream或OutputStream的子类,习惯上称RandomAccessFile创建的对象为一个流,它的指向既可以是源也可以是目的地。
对文件进行读写操作时,就可以创建一个RandomAccessFile对象。
RandomAccessFile类的构造方法:
- RandomAccessFile(String name,String mode) 参数name是文件名,给出创建的流的源或目的地,mode文件的访问权限,取r(只读)或rw(可读写)
- RandomAccessFile(File file,String mode)参数file是一个File对象,创建对象时应该捕获IO异常
RandomAccessFile类常用方法
方法名 功能 getFilePointer() 获取当前流在文件中的读写位置 length() 获取文件的长度 readByte() 从文件读取一个字节 readDouble() 从文件读取一个双精度浮点值(8个字节) readInt() 从文件读取一个int值(4个字节) readLine() 从文件读取一个文本行 readUTF() 从文件读取一个UTF字符串 seek(long a) 定位到当前流距离文件开头a个字节数的位置 write(byte b[]) 向文件写入b.length个字节 writeDouble(double v) 向文件写入一个双精度浮点值 writeInt(int v) 向文件写入一个int值 writeUTF(String s) 向文件写入一个UTF字符串
4.文件上传
要上传文件到服务器,JSP页面必须有File类型的表单,并且表单中必须将ENCTYPE的属性值设为“multipart/form-data”
<form action="接受文件上传页面" method="post" ENCTYPE="multipart/form-data">
<input type="file" name="test"/>
</form>JSP引擎可以让内置对象request调用getInputStream()方法获取一个输入流,通过这个输入流读入用户上传的全部信息。
upload.jsp
<%@ page contentType="text/html;charset=utf-8" %>
<HTML><BODY>
<P>选择要上传的文件:<BR>
<FORM action="accept.jsp" method="post" ENCTYPE="multipart/form-data">
<INPUT type=FILE name="boy" size="38"> <BR>
<INPUT type="submit" name ="g" value="提交">
</BODY></HTML>
accept.jsp
<%@ page contentType="text/html;charset=utf-8" %> <%@ page import ="java.io.*" %> <HTML><BODY> <%try{ InputStream in=request.getInputStream(); File f=new File("d:/story","B.txt"); FileOutputStream o=new FileOutputStream(f); byte b[]=new byte[1000]; int n; while((n=in.read(b))!=-1) {o.write(b,0,n); } o.close(); in.close(); } catch(IOException ee){} out.print("文件已上传"); %> </BODY></HTML>
5.文件下载
JSP内置对象response调用getOutputStream()方法可以获取一个指向用户的输出流,服务器将文件写入这个流,用户就可以下载这个文件了。当提供下载功能时,应该使用response对象向用户发送HTTP头消息,浏览器就会调用相应的外部程序打开下载的文件。
response调用setHeader方法添加下载头的格式:
response.setHeader(“Content-disposition”,”attachment;filename=”下载文件名”);
download.jsp
<%@ page contentType="text/html;charset=utf-8" %>
<HTML>
<BODY>
<P>点击超链接下载Zip文档book.Zip
<BR> <A href="loadFile.jsp">下载book.zip
</Body>
</HTML>
loadFile.jsp
<%@ page contentType="text/html;charset=utf-8" %>
<%@ page import="java.io.*" %>
<HTML>
<BODY>
<% //获得响应客户的输出流:
OutputStream o=response.getOutputStream();
//输出文件用的字节数组,每次发送500个字节到输出流:
byte b[]=new byte[500];
//下载的文件:
File fileLoad=new File("d:/story","book.zip");
//客户使用保存文件的对话框:
response.setHeader("Content-disposition","attachment;filename="+"book.zip");
//通知客户文件的MIME类型:
response.setContentType("application/x-tar");
//通知客户文件的长度:
long fileLength=fileLoad.length();
String length=String.valueOf(fileLength);
response.setHeader("Content_Length",length);
//读取文件book.zip,并发送给客户下载:
FileInputStream in=new FileInputStream(fileLoad);
int n=0;
while((n=in.read(b))!=-1)
{ o.write(b,0,n);
}
%>
</BODY></HTML>
JSP学习笔记(7)-JSP的文件操作的更多相关文章
- VBA二次学习笔记(1)——文件操作
说明(2018-9-1 11:20:46): 1. 上班三个月了,累的一逼,真的是钱少事多离家远,每天早上六点起,晚上八点回.哎,少壮不努力啊! 2. 三个月没写博客了,上一篇已经是5.29的了,真的 ...
- python学习笔记(二)文件操作和集合
集合: 集合也是一种数据类型,一个类似列表东西,它的特点是无序的,不重复的,也就是说集合中是没有重复的数据 集合的作用: 1.它可以把一个列表中重复的数据去掉,而不需要你再写判断 2.可以做关系测试, ...
- python学习笔记——(三)文件操作
·集合操作及其相应的操作符表示集合中没有插入,只有添加,因为毕竟无序 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Vergil Zhan ...
- python 基础学习笔记(5)--文件操作
**python 的文件操作** - [ ] 使用python来读写文件是非常简单的操作,我们使用open()来打开一个文件,获取到文件的语柄,然后通过文件语柄就可以进行各种各样的操作了. - [ ] ...
- 02-Node.js学习笔记-系统模块fs文件操作
2.1.什么是系统模块 Node 运行环境提供的API,因为这些API都是以模块化的方式进行开发的,所有我们又称Node运行环境提供的API为系统模块 3.1系统模块fs文件操作 //f :file ...
- python学习笔记(五)文件操作和集合
文件基本操作: 现有文件file.txt f=open('file.txt','r')#以只读方式打开一个文件,获取文件的句柄,如果是读的话,r可以不写,默认就是只读:文件不存在时,会报错 first ...
- python学习笔记(11)文件操作
一.读文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...
- Nodejs学习笔记(4) 文件操作 fs 及 express 上传
目录 参考资料 1. fs 模块 1.1 读取文件fs.readFile 1.2 写入文件fs.writeFile 1.3 获取文件信息fs.stat 1.4 删除文件fs.unlink 1.5 读取 ...
- python学习笔记(八)——文件操作
在 windows 系统下,我们通过 路径+文件名+扩展名的方式唯一标识一个文件,而在 Linux 系统下通过 路径+文件名唯一标识一个文件. 文件分类:文件主要可以分为文本文件和二进制文件,常见的如 ...
- Go语言学习笔记(五)文件操作
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 文件读取 os.File 封装了文件相关操作 type File File代表一个打开的文件对象. func Cr ...
随机推荐
- C/S,B/S的应用和区别
·C/S——客户/服务器模式 特点:非对等相互作用——即客户与服务器出于不平等的地位 表现在:服务器用有客户所不具备的硬件和软件资源以及运算能力,服务器提供服务,客户请求服务. A.客户端与服务器的数 ...
- LOJ#3093. 「BJOI2019」光线(递推+概率期望)
题面 传送门 题解 把\(a_i\)和\(b_i\)都变成小数的形式,记\(f_i\)表示\(1\)单位的光打到第\(i\)个玻璃上,能从第\(n\)个玻璃下面出来的光有多少,记\(g_i\)表示能从 ...
- SpaceSyntax【空间句法】之DepthMapX学习:第四篇 凸多边形图分析[未完]
这一篇正式讲解分析类型中的第一个,凸多边形分析,流程图参照上一篇的. 博客园/B站/知乎/CSDN @秋意正寒(我觉得这一篇肯定很多盗图的,那么我在版头加个本篇地址吧) https://www.cnb ...
- odoo开发环境搭建(一):安装VMware Workstation
odoo开发环境搭建(一):安装VMware Workstation
- (转)python的ConfigParser模块
原文:https://blog.csdn.net/miner_k/article/details/77857292 如何使用Python3读写INI配置文件-------https://blog.cs ...
- (转)Python的web服务器
1.浏览器请求动态页面过程 2.WSGI Python Web Server Gateway Interface (或简称 WSGI,读作“wizgy”). WSGI允许开发者将选择web框架和web ...
- RabbitMQ AMQP (高级消息队列协议)
目录 RabbitMQ AMQP (高级消息队列协议) Message Queue 简介 概念 基本组成 场景及作用 AMQP简介 模型架构 基础组件 AMQP-RabbitMQ 简介 模型 特性 参 ...
- 【Canal源码分析】client工作过程
client的工作过程,需要我们自己去编写对应的逻辑,我们目前只能从example写的例子来看.目前examle中提供了两个例子,一个是单机的,一个是集群的cluster,我们后续如果需要进行开发的话 ...
- SwitchHosts—hosts管理工具
SwitchHosts是一个管理.快速切换Hosts小工具,开源软件,一键切换Hosts配置,非常实用,高效.开发Web过程成,部署有多套环境,网址域名都相同,部署在不同的服务器上,有开发环境.测试环 ...
- 详解C#泛型(三)
一.前面两篇文章分别介绍了定义泛型类型.泛型委托.泛型接口以及声明泛型方法: 详解C#泛型(一) 详解C#泛型(二) 首先回顾下如何构建泛型类: public class MyClass<T&g ...