第8章JSP中的文件操作

上传人:E**** 文档编号:91643070 上传时间:2019-06-30 格式:PPT 页数:40 大小:713.50KB
返回 下载 相关 举报
第8章JSP中的文件操作_第1页
第1页 / 共40页
第8章JSP中的文件操作_第2页
第2页 / 共40页
第8章JSP中的文件操作_第3页
第3页 / 共40页
第8章JSP中的文件操作_第4页
第4页 / 共40页
第8章JSP中的文件操作_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《第8章JSP中的文件操作》由会员分享,可在线阅读,更多相关《第8章JSP中的文件操作(40页珍藏版)》请在金锄头文库上搜索。

1、第8章 JSP中的文件操作,文件可以永久地存储信息,从本质上讲文件就是存放在盘上的一系列数据的集合。应用程序如果想长期保存数据,就必须将数据存储到文件中,这就涉及到文件的操作。而在编写网站应用程序的过程中,有许多地方要对文件进行操作。本章将要对JSP中文件操作的应用作一些介绍,如读写文件、上传下载文件、创建删除目录等。,本章学习目标,了解JSP中的数据流。 了解File类。 掌握文件相关的操作,如读写、上传、下载文件和创建删除目录等。 了解使用OReilly上传包。,8.1 数据流和File类,数据从一个输入源获得。程序的结果被送到输出目的地。这些源和目的地被广泛地定义。例如一个网络连接器,内

2、存缓冲区或磁盘文件可以被输入/输出类熟练地操作,这些外设都由相同的抽象体流(stream)来处理。流,是一个生产或消费信息的逻辑实体。流通过输入/输出系统与物理设备相连。尽管与之相连的实际的物理设备各不相同,所有的流都以同样的方式运转。,为了进行文件读写操作,需要用适当的Java I/O类创建对象,这些对象包含从文件中读写数据的方法。 Java I/O中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示:InputStream,OutputStream,Reader,Writer。Java中其它多种多样变化的流均是由它们继承出来的。,图 输入流示意图,图 输出流示意图,以字节为

3、单位进行读写的称为字节流。 字节流分为“输入流”和“输出流”。可以从中读出一系列字节的对象称为“输入流”(Input Stream);而能向其中写入一系列字节的对象则称为“输出流”(Output Stream) 这两种对象分别是由java.io包中的抽象类InputStream和OutputStream来实现的。,图 InputStream类结构图,图 OnputStream类结构图,字符流:提供了处理任何类型输入/输出操作的足够的功能,字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串。 Reader:用于读取字符流的抽象类。 子类必须实现的方法只有 read(c

4、har, int, int) 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。用于读取字符流的抽象类。 Writer :写入字符流的抽象类。 子类必须实现的方法仅有 write(char, int, int)、flush() 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。,字符流以Reader和Writer为顶层。Reader是定义Java的流式字符输入模式的抽象类,该类的所有方法在出错情况下都将引发IOException异常。Writer是定义流式字符输出的抽象类,所有该类的方法都返回一个void值并在

5、出错条件下引发IOException异常。,图 Reader类结构图,图 Writer类结构图,8.1.2 File类,File类:用于文件系统操作的类 Java内建的用来操作文件目录的类File,该类提供新增、删除与修改等操作文件相关功能所需的方法成员。 File类没有指定信息怎样从文件读取或向文件存储; 它描述了文件本身的属性。 File对象用来获取或处理与磁盘文件相关的信息,例如权限、时间、日期和目录路径。另外,File还浏览子目录层次结构。,可以用来生成File对象的构造函数如下。 File(String directoryPath) File(String directoryPath

6、,String filename) File(File dirObj,String filename) 其中,directoryPath是文件的路径名, filename是文件名, dirObj是一个指定目录的File对象。 第一个构造函数通过全路径路径文件名来创建对象,pathname可以是绝对路径也可以是相对路径。 第二个构造函数通过父目录和文件名来创建对象,filename是不含路径的文件名。 第三个构造函数也是通过父目录和文件名来创建对象,但父目录由一个File对象提供。,File类位于命名空间Java.io,因此在JSP网页使用File类之前,必须利用以下的程序代码,将此命名空间载入

7、: 表8-1 File类的属性,由于File对象本身仅仅只是参考一个特定的路径,因此上述的路径及文件参数也可能代表一个不存在的文件,在进行文件的操作之前,可以利用exists方法,查看文件是否存在,以判断是否进行相关的文件操作,这一点非常重要,若是尝试存取一个不存在的文件,会让系统产生一个错误的例外对象。 【例8-1】下面的范例演示一个查看文件相关性质的JSP网页实例。查看文件内容(usingFile.jsp),一般文件的维护操作包含了新增、删除及列举等操作,File类本身也提供了相关功能的方法成员,列举如表8-2所示。 表8-2 文件维护方法,1. 创建文件与目录文件夹 File类提供一个名

8、称为createNewFile()的方法成员,用以建立File对象参数所指定的文件,以下为引用此方法的程序代码范例片段: bool blCreate = myFile.createNewFile() ; 由于createNewFile()返回一个布尔值,因此必须利用声明为boolean类型的变量存储运行结果,若是上式blCreate结果值为true,表示文件建立成功;若是false则表示文件建立失败,并且返回一个IOException例外对象,这个情形通常发生在指定的目录底下已经存在所要建立的文件,因此在建立文件之前查看其是否存在是非常重要的操作。,File类另外提供建立目录的方法成员mkdi

9、r,同样的我们必须利用File类的实体对象引用这个方法以建立指定的目录,例如以下的程序代码 File myFile = new File(pathName) ; bool blMK = myFile.mkdir() ; 其中的返回值意义同上述CreateNewFile方法,这里必须注意的是,由于引用这个方法所要建立的是一个目录,因此第1行程序代码中所指定的参数值必须是一个路径而非文件,同时指定建立的目录其上层目录的路径必须是存在的,例如下面的程序代码: boolean blNew ; File myDir = new File(“C:/testDir/newDir“) ; blNew = my

10、Dir.mkdir() ; 其中mkdir()在C:/testDir目录下建立一个新的目录newDir,前提是C:/testDir目录必须存在,否则建立目录的作业将会失败。,另外一个类似mkdir()的方法为mkdirs(),这个方法不同的地方在于若是指定的目录路径不存在,则整个目录结构均将被创建,例如以下的程序代码: File myMkDirs = new File(“C:/firstDir/secondDir/thirdDir“) ; blNew = myMkDirs.mkdirs() ; 当网页运行该段程序代码的时候,其中C:/firstDir/secondDir/thirdDir这个路

11、径的文件夹以及子文件夹,都会被建立。,8.2 读写文本文件,操作文件主要有两种类型,一种是读取内容,一种是写入内容或者更改文件的属性。下面分别讨论。 读取文件内容 在读取文件时,可以有两种选择方式,一种是通过ServletContext读取,另一种是直接使用java.io.FileReader等对象。前者只能读取Servlet上下文中的文件,后者可以读取任何位置的文件。,例使用ServletContext读取文件readFile.jsp % try /使用ServletContext装入文件资源 InputStream in=getServletContext().getResourceAsS

12、tream(“/file.txt“); String file=“; int temp=0; while(temp=in.read()!=-1) file+=(char)temp; ,/关闭输入流。 in.close(); out.println(new String(file.getBytes(“iso-8859-1“); out.flush(); catch(Exception e) out.println(e); e.printStackTrace(); %,在ServletContext接口中,定义了一个java.io.InputStream getResourceAsStream(j

13、ava.lang.String path)方法来访问给定的资源。这里的path参数必须以“/”开始(在根目录下)。 一旦获得了InputStream,我们就可以通过这个输入刘读取资源。 由于使用InputStream对象,如果在读取后不对字符进行重新编码,那么对中文将出现乱码问题。而且没有使用缓冲的输入流,它的效率较低。,使用带缓冲区的输入流读取文件资源。例如readFile2.jsp 使用FileReader读取文件资源。例readFile3.jsp 使用一个BufferReader封装FileReader,这样可以每次读取一行数据。,读写文件是文件操作最基本的内容。 读写文本文件所需的功能

14、,主要由2个类所提供:FileWriter()及FileReader()。 FileReader()则用以读取文件中的数据。 语法如下: FileReader myFileReader = new FileReader(strFileName) ; 必须输入指定操作的文件完整路径名称或是File对象 FileReader myFileReader = new FileReader(objFile) ;,FileWriter()负责将数据写入文件 语法如下: FileWriter myFileWriter = new FileWriter(fileName ) 将数据写入文本文件之前,首先必须建

15、立FileWriter对象,同时传入所要操作的文件完整路径名称字符串, FileWriter myFileWriter = new FileWriter(myFile ),【例8-2】一个读写文本文件的例子readwritefile.jsp, 首先创建一个test.txt文件,并写入几句话, 然后再读取文件中的数据,并且把它们显示到浏览器里,写入内容到文件readwriteFile.jsp PrintWriter类用来将格式化对象打印到一个文本输出流,实现PrintStream中的所有打印方法,其使用方法和读取二进制文件中的BufferedReader类似。在上边的这段代码中,每次向该二进制文

16、件中写入的新内容都会将原来的内容覆盖,如果不想覆盖原来的内容,可以修改如下代码。 PrintWriter writer=new PrintWriter(new BufferedWriter(new FileWriter(“d:book.java“,true); 即在创建PrintWriter对象时,添加一个参数true,这样每次向二进制文件内写入新的内容时,就会追加到原来的内容后面。,8.3 文件的浏览,【例8-3】浏览当前目录中文件与子目录的例子browserFile.jsp,例子执行后,会在浏览器中输出当前目录中的所有文件和子目录,并对文件和子目录进行统计。,8.4 创建和删除目录,【例8-4】有关目录的创建与删除的例子Directory.jsp。, % String path=request.getRealPath(“); path=path + “text“; File d=new File(path); if(d.exists() d.delete(); out.prin

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号