JSP学习笔记(7)-JSP的文件操作
2016-05-29 10:34
465 查看
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>
相关文章推荐
- 探探javascript事件机制之庖丁解牛
- FastJSON实现详解
- 探探javascript事件机制之先混脸熟
- json数据基础讲解
- js省市县三级联动效果实例
- 简单样例之:div+css+javascript+php+mysql
- JavaScript对字符串操作的方法
- 常规功能和模块自定义系统 (cfcmms)—046模块导航功能的重构(4)层级模块的导航
- 理清JavaScript正则表达式
- js实现精确到秒的倒计时效果
- 序列化后的json串与解析json串实体间的关系
- JSTL_core
- javaScript 工作必知(五) eval 的使用
- JSP 内置对象和域
- ExtJS创建Form表单
- localStorage存值取值以及存取JSON,以及基于html5 localStorage的购物车
- JSP 基本语法
- JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)
- js 弹窗控制,实现可拖拽,设置大小
- js获取客户端信息