第五讲 JSP中的文件操作(1)教学目的 本讲主要讲述JSP中使用Java输入、输出流实现文件的读写操作 。

  • 格式:ppt
  • 大小:149.00 KB
  • 文档页数:38

下载文档原格式

  / 38
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五讲 JSP中的文件操作(1)
•教学目的
本讲主要讲述JSP中使用Java输入、输出流实现文件的读写 操作 。
•知识要点
1 Flie 对象 2 字节输入、输出流对象 3 字符输入、输出流对象 4 随机文件流
第五讲 JSP中的文件操作(1)
有时服务器需要将客户提交的信息保存到文件或根据客 户的要求将服务器上的文件的内容显示到客户端。JSP通过 Java的输入输出流来实现文件的读写操作。
5.1.1 获取文件的属性
经常使用File类的下列方法获取文件本身的一些信息:
1. public String getName():
获取文件的名字。
2. public boolean canRead():
判断文件是否是可读的。
3. public boolean canWrite(): 判断文件是否可被写入。
5.1.3 删除文件和目录
File对象调用方法public boolean delete()可以删除当前对象 代表的文件或目录,如果File对象表示的是一个目录,则该 目录必须是一个空目录,删除成功返回true。
下面的例子4删除Root目录下的A.java文件和Students目录。
例子4
<%@ page contentType="text/html;charset=GB2312" %> <%@ page import ="java.io.*" %> <HTML> <BODY> <%File f=new File("d:/Tomcat/Jakarta-tomcat-4.0/webapps/root/","A.java");
<% for(int i=0,number=0;(i<file.length)&&(number<=5);i++) {if(file[i].length()>=1000) {out.print("<BR>"+file[i].toString()); number++; } }
%> </Font> </BODY> </HTML>
File dir=new File("d:/Tomcat/Jakarta-tomcat-4.0/webapps/root","Students"); boolean b1=f.delete(); boolean b2=dir.delete(); %> <P>文件A.java成功删除了吗? <%=b1%> <P>目录Students成功删除了吗? <%=b2%> </BODY> </HTML>
FileInputStream(String name); FileInputStream(File file);
第一个构造方法使用给定的文件名name创建一个FileInputStream对象,第二个构 造方法使用File对象创建FileInputStream对象。参数name和file指定的文件称做输入流 的源,输入流通过调用read方法读出源中的数据。
输入流通过使
用 read() 方 法
从输入流读出

来自源中的数

图5.1 输入流示意图
输出流通过使 用 write() 方 法 把数据写入输 出流到达目的 地
目的地
图5.2输出流示意图
InputStream类的常用方法:
• int read(): 输入流调用该方法从源中读取单个字节的数据,该方法返
取len个字节写到输出流。
• void close(): 关闭输出流。
5.2.1 FileInputStream 和FileOutputStream类
FileInputStream该类是从InputStream中派生出来的简单输入类。该类的所有方 法都是从InputStream类继承来的。为了创建FileInputStream类的对象,用户可以 调用它的构造方法。下面显示了两个构造方法:
<% File dir=new File("D:/Tomcat/jakarta-tomcat-4.0/webapps/root","Students");
%> <P> 在root下创建一个新的目录:Student,<BR>成功创建了吗?
<%=dir.mkdir()%> <P> Student是目录吗?
FileOutputStream(String name); FileOutputStream(File file);
5.2.2 BufferedInputStream和BufferedOutputStream类
OutputStream类的常用方法:
• void write(int n): 输出流调用该方法向输出流写入单个字节。 • void write(byte b[]): 输出流调用该方法向输出流写入一个字节数组。 • void write(byte b[],int off,int len): 从给定字节数组中起始于偏移量off处
回字节值(0~255之间的一个整数),如果未读出字节就返回-1。
• int read(byte b[]): 输入流调用该方法从源中试图读取b.length个字节到
b中,返回实际读取的字节数目。如果到达文件的末尾,则返回-1。
• int read(byte b[], int off, int len): 输入流调用该方法从源中试图读取
FileInpuStream文件输入流打开一个到达文件的输入流(源就是这个文件,输入流 指向这个文件)例如,为了读取一个名为myfile.dat的文件,建立一个文件输入流对 象,如下所示:
try {FileInputStream ins = new FileInputStream("myfile.dat"); }
午夜至文件最后修改时刻的毫秒数)。
在下面的例子1中,我们使用上述的一些方法,获取某些文件的信息。
例子1
Example5_1.jsp
<%@ page contentType="text/html;charset=GB2312" %> <%@ page import="java.io.*"%> <HTML> <BODY bgcolor=cyan><Font Size=1>
4. public boolean exits():
判断文件是否存在。
5. public long length():
获取文件的长度(单位是字节)。
6. public String getAbsolutePath():获取文件的绝对路径。
7. public String getParent():
获取文件的父目录。
catch (IOException e ) { //文件I/O错误 System.out.println("File read error: " +e ); }
与FileInputStream类相对应的类是FileOutputStream类。 FileOutputStream提供了基本的文件写入能力。除了从FileOutputStream类 继承来的方法以外,FileOutputStream类还有两个常用的构造方法,这两 个构造方法如下所示:
5.1 File 类
File类的对象主要用来获取文件本身的一些信息,例如文件所在的目 录、文件的长度、文件读写权限等,不涉及对文件的读写操作。
创建一个File对象的构造方法有3个:
File(String filename); File(String directoryPath,String filename); File(File f, String filename);
<%=dir.isDirectory()%> </Font> </BODY> </HTML>
(2)列出目录中的文件
如果File对象是一个目录,那么该对象可以调用下述方法列出该目录下的 文件和子目录:
public String[] list(): 用字符串形式返回目录下的全部文件, public File [] listFiles():用File对象形式返回目录下的全部文件。 在下面的例子3中,输出了Root下的全部文件中的5个和全部子目录。
其中,filename是文件名字,directoryPath是文件的路径,f是指定成一 个目录的文件。
使用File(String filename)创建文件时,该文件被认为是与当前应用程序 在同一目录中,由于JSP引擎是在bin下启动执行的,所以该文件被认为 在下列目录中:
D:\Tomcat\jakarta-tomcat-4.0\bin\ 。
<%File f1=new File("D:\\Tomcat\\jakarta-tomcat-4.0\\webapps\\root","Example5_1.jsp"); File f2=new File("jasper.sh");
%> <P> 文件 Example5-1. jsp是可读的吗?
<%=f1.canRead()%> <BR> <P>文件Example5_1.jsp的长度:
5.2 使用字节流读写文件
Java的I/O流提供一条通道程序,可以使用这条通道把 源中的数据送给目的地。把输入流的指向称做源,程序从 指向源的输入流中读取源中的数据。而输出流的指向是数 据要去的一个目的地,程序通过向输出流中写入数据把信 息传递到目的地,如下图5.1、5.2所示。java.io包提供大 量的流类。所有字节输入流类都是InputStream(输入流) 抽象类的子类,而所有字节输出流都是OutputStream(输出 流)抽象类的子类。
<%=f1.length()%>字节 <BR> <P> jasper.sh是目录吗?
<%=f2.isDirectory()%> <BR> <P> Example5-1.jsp的父目录是:
<%=f1.getParent()%> <BR> <P>jasper.sh的绝对路径是:
<%=f2.getAbsolutePath()%> </Font> </BODY> </HTML>
len个字节到b中,并返回实际读取的字节数目。如果到达文件的末尾, 则返回-1,参数off指定从字节数组的某个位置开始存放读取的数据。
• void close(): 输入流调用该方法关闭输入流。 • long skip(long numBytes): 输入流调用该方法跳过numBytes个字节,并
返回实际跳过的字节数目。
8. public boolean isFile():
判断文件是否是一个正常文件,而不是目录.
9. public boolean isDirectroy(): 判断文件是否是一个目录。
10. public boolean isHidden(): 判断文件是否是隐藏文件。
Biblioteka Baidu
11. public long lastModified(): 获取文件最后修改的时间(时间是从1970年
%> <P> 列出root下的5个长度大于1000字节的文件和全部目录: <BR>目录有:
<% for(int i=0;i<file.length;i++) {if(file[i].isDirectory()) out.print("<BR>"+file[i].toString()); }
%> <P> 5个长度大于1000 字节的文件名字:
5.1.2 创建目录
(1)创建目录
File对象调用方法:public boolean mkdir()创建一个目录,如果创建成功 返回true,否则返回false(如果该目录已经存在将返回false)。
在下面的例子2中,我们在Root下创建一个名字是Students的目录.
例子2
<%@ page contentType="text/html;charset=GB2312" %> <%@ page import="java.io.*"%> <HTML> <BODY><Font Size=2>
例子3
<%@ page contentType="text/html;charset=GB2312" %> <%@ page import="java.io.*"%> <HTML> <BODY><Font Size=2>
续前页:
<% File dir=new File("D:/Tomcat/jakarta-tomcat-4.0/webapps/root"); File file[]=dir.listFiles();