第六章 JSP中的文件操作

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Web开发技术
第六章 JSP中的文件操作


本章主Fra Baidu bibliotek内容
File类 使用字节流读写文件 使用字符流读写文件 数据流 对象流 随机访问类(RandomAccessFile) 文件上传 文件下载 文件的分页读取

File类


File类的对象主要用来获取文件本身的一些信息, 例如文件所在的目录、文件的长度、文件读写权限 等,不涉及对文件的读写操作。 创建一个Flie对象的构造方法有3个: File(String filename):通过文件名来创建对象, 该文件被默认放在D:\Tomcat 6.0目录下。 File(String directoryPath, String filename):通过 父目录和文件名创建对象,这里的filename是不 含路径的文件名。 File(File f, String filename):也是通过父目录和 文件名来创建对象,但父目录由一个File对象提 供。 其中,filename是文件名,directoryPath是文件的 路径,f是一个指定目录的文件对象。

使用字节流读写文件
在例6.5中,服务器将若干内容写入一个文件,然后 读取这个文件,并将文件的内容显示给客户。 运行页面效果如下图,同时在 D:\webdemo\Students目录下创建了hello.txt文件, 文件内容为: 你们好,很高兴认识你们!<BR>nice to meet you

使用字节流读写文件



流是一个数据序列,它可以看成是数据的导管。导 管的一端是源端,另一端是目的端。数据从源端输 入,从目的端输出。流的使用者不用考虑流内部数 据是如何传输的,只需要向源端注入数据和从目的 端提取数据即可。 流可分为:字节流、字符流、数据流和对象流等。 字节流:字节流的处理单元是1个字节,用来操作 字节和字节数组。 字节流有两个超类,分别是字节输入流 (InputStream)和字节输出流(OutputStream)
File类

File类定义了很多获取File对象属性的方法,可分为属性操作、 文件操作和目录操作,如下:
(1)属性操作 public String getName():获取文件名 public String getPath():获取文件路径 public String getAbsolutePath():获取文件绝对路径 public long length():获取文件的长度(单位是字节) public String getParent():获取文件的父目录 public File getParentFile():获取文件父目录中的文件 public long lastModified():获取文件最后修改时间 public boolean canRead():判断文件是否是可读的 public boolean canWrite():判断文件是否可被写入 public boolean exits():判断文件是否存在 public boolean isFile():判断是不是一个正常文件 public boolean isDirectroy():判断是不是一个目录 public boolean isHidden():判断文件是不是隐藏文件

创建输入输出流对象可能会出错(异常),此时使用 IOException对象来表示此异常信号。可使用try、catch程序 块处理。
BufferedReader和BufferedWriter
为了提高读写的效率,FileReader流经常和 BufferedReader流配合使用, FileWriter流和 BufferedWriter流配合使用。 BufferedReader流还可以使用方法String readLine()读取一行;BufferedWriter流还可 以使用方法Void writer(String s,int off,int length)将字符串s的一部分写入文件,使用方 法newLine()向文件写入一个行分隔符。
BufferedInputStream和BufferedOutputStream
为了提高读写的效率,FileInputStream流经常和BufferedInputStream流 配合使用, FileOutputStream流和BufferedOutputStream流配合使用。 BufferedInputStream类的一个常用构造方法是: BufferedInputStream(InputStream in); 该方法创建缓存输入流,指向的是一个输入流。当我们要读取一个文件 时,可先建立一个指向该文件的文件输入流: FileInputStream in = new FileIputStream(“A.txt”); 然后再创建一个指向文件输入流in的输入缓存流: BufferedInputStream buffer = new BufferedInputStream(in); 这时,我们就可以让buffer调用read方法读取文件的内容。buffer在读取 文件的过程中,会进行缓存处理,提高读取效率。 同样,当要向一个文件写入字节时,可先建立一个指向该文件的输出流, 然后再创建一个指向输出流的输出缓存流。buffer调用write方法向文件 写入内容时会进行缓存处理,提高写入效率。需要注意的是,写入完毕 后,须调用flush方法将缓存中的数据存入文件。

当我们使用文件输入流构造方法建立通往文件的输入流时,可能会出错 (异常),此时使用IOException对象来表示此异常信号。可使用catch 程序块处理,例如:
try { FileInputStream ins=new FileInputStream("myfile.dat"); } catch(IOException e) { System.out.println("File read error" ); }
File类


在例6.3中,我们使用目录操作的方法,来列出目录 下的文件和子目录。 运行结果如下:
File类


在例6.4中,我们使用目录操作的方法,来删除目录 下的文件和子目录。 运行结果如下:
本章主要内容
File类 使用字节流读写文件 使用字符流读写文件 数据流 对象流 随机访问类(RandomAccessFile) 文件上传 文件下载 文件的分页读取

本章主要内容
File类 使用字节流读写文件 使用字符流读写文件 数据流 对象流 随机访问类(RandomAccessFile) 文件上传 文件下载 文件的分页读取

使用字符流读写文件




字节流可以读/写文件,但字节流的处理单元为1个字节,对 于占用2个字节以上的字符,如汉字(在文件中占用2个字 节),如果使用字节流读写文件可能会出现乱码现象,所以 JSP中提供了字符流。字符流处理的单元为2个字节的 Unicode字符,提供了处理任何类型输入/输出操作的足够的 功能,在Unicode字符集中,一个汉字被看作一个字符,采 用字符流就可以避免乱码。 字符流有两个超类,分别为字符输入流(Reader)和字符输 出流(Writer)。 Reader类和Writer类的层次图以及常用的方法见教材128 页—129页。 我们重点关注以下的类: FileReader和FileWriter BufferedReader和BufferedWriter
File类
(2)文件操作 public boolean renameTo(File dest):给文件换名 public boolean delete():删除文件 (3)目录操作 public boolean mkdir():创建目录 public String[] list():以字符串形式列出目录 public File[] listFiles():以File对象形式列出目录

使用字符流读写文件
在例6.6中,服务器将若干内容写入一个文件, 然后读取这个文件,并将文件的内容显示给 客户。 运行页面效果如下图,同时在 D:\webdemo\Students目录下创建了apple.txt 文件。

本章主要内容
File类 使用字节流读写文件 使用字符流读写文件 数据流 对象流 随机访问类(RandomAccessFile) 文件上传 文件下载 文件的分页读取

数据流
在实际应用中,利用各种流的特点,将多个流套接在一起可 构成流链。程序通过输入流链读取数据源点数据,通过输出 流链向数据终点写数据。这里的数据源点和数据终点一般指 文件或内存。下面介绍输入流管道模型和输出流管道模型。 (1)输入流链 输入流管道有3 种型号,分别为 1号(FileInputStream) 2号(BufferedInputStream) 3号(DataInputStream) 每种管道代表一种流,将它们进行管道套接后,可以组成4 种输入流链,用户可以选择其中的任意一种流链,从数据源 点读取数据。
使用字节流读写文件
InputStream类和OutputStream类的层次图以 及常用的方法见教材124页—125页。 我们重点关注以下的类:

FileInputStream和FileOutputStream BufferedInputStream和BufferedOutputStream
File类


在例6.1中,我们使用属性操作的一些方法,来获取 文件的信息。 运行结果如下:
File类



在例6.2中,我们使用目录操作的方法,来创建一个 目录。 File对象调用public boolean mkdir()创建目录,若 调用成功返回true,否则返回false(若该目录已经 存在,也返回false)。 运行结果如下:
FileReader和FileWriter

FileReader类是从Reader类中派生出来的简单输入类,用户 可以调用它的构造方法,如下:
FileReader(String name):使用给定文件名name创建一个
FileReader对象。 FileReader(File file):使用File对象创建FileReader对象。
FileInputStream和FileOutputStream

FileInputStream类是从InputStream类中派生出来的简单输入类,用户可 以调用它的构造方法,如下:
FileInputStream(String name):使用给定的文件名name创建一个
FileInputStream对象。如: FileInputStream istream=new FileInputStream(“myfile.dat”) FileInputStream(File file):使用File对象创建FileInputStream对象。如: File f=new File(“myfile.dat”); FileInputStream istream=new FileInputStream(f);

数据流
数据流能允许程序按着与机器无关的风格读取Java原始数据, 也就是说,当我们读取一个数值时,不必再关心这个数值应 当是对少个字节。 数据流包括数据输入流(DataInputStream)和数据输出流 (DataOutputStream)。 数据输入流的构造方法: public DatalnputStream(InputStream in):将创建的输入流指 向一个由参数in指定的输入流,以便从后者读取数据。 数据输出流的构造方法: public DataOutputStream(OutputStream out):将创建的输出 流指向一个由参数out指定的输出流,然后通过这个输出流 把Java数据类型的数据写到输出流out。 in是输入流对象,out是输出流对象。

参数name和file指定的文件称作输入流的源,输入流通过调 用read方法读出源中的数据。 与FileReader类相对应的类是FileWriter类。FileWriter类提 供了基本的文件写入能力,除了从Writer类继承来的方法之 外,FileWriter类还有两个常用的构造方法:
FileWriter(String name) FileWriter(File file)
相关文档
最新文档