LOGO File 操作
2 主要内容 1. 操作文件和文件夹 1. 操作文件和文件夹 2. 文件的读写 2. 文件的读写 3. 文件操作应用 3. 文件操作应用
3 1. 操作文件和文件夹 1 、获得文件夹的物理路径 在 JSP 中,使用 request 对象的 getRealPath() 方法来获得文件夹的物理路径。 如: 本项目 JSP 文件所在路径为: 在调用 request 对象的 getRealPath() 方法时,使用斜杠 “ / ” 代表本 Web 应用地址。
4 2 、创建文件和文件夹 File 类是 Java 中用于文件操作的类,它存 在于包 java.io.File 中。 File 类提供了一些成员函 数来操作文件和文件夹。 利用 File 类的 mkdir() 方法创建文件夹。 使用 createNewFile() 方法创建文件。 String tmp_path = request.getRealPath("/")+“xxgcxy"; File fp1 = new File(tmp_path); fp1.mkdir(); File fp2 = new File(tmp_path,"a.txt"); fp2.createNewFile(); File fp3 = new File(tmp_path,"b.txt"); fp3.createNewFile(); File fp4 = new File(tmp_path,"c.txt"); fp4.createNewFile();
5 3 、列出文件夹下的文件和文件夹 File 类的 listFiles() 方法获得指定文件夹 中的所有内容,包括文件夹和文件,并将结果返回到 数组中。 String path = request.getRealPath("/"); String tmp_path = path+“xxgcxy"; File fp1 = new File(tmp_path); File filelist[]=fp1.listFiles(); 使用 getName() 方法获得文件夹和文件 的名称。
6 例如: <% String path = request.getRealPath("/"); String tmp_path = path+“xxgcxy"; File fp1 = new File(tmp_path); File filelist[]=fp1.listFiles(); %> 文件夹 中有以下文件夹和文件: <% for(int i=0; i<filelist.length; i++){ %>
7 4 、删除文件和文件夹 使用 File 类对象的 exists() 方法判断文件和文件 夹是否存在,如果存在,就使用 delete() 方法将其 删除。 5 、取得文件大小 使用 File 类对象的 length() 方法。 <% String path1 = request.getRealPath("/"); File fp = new File(path1,“index.jsp"); %> 文件 index.jsp 的大小为: 字节
8 6 、判断是文件还是文件夹 使用 File 类对象的 isFile() 方法(返回 True 表 示为文件)和 isDirectory() 方法(返回 True 表示 为文件夹) 。 7 、获得文件属性 4 个 File 类对象的方法: canRead() 方法:判断文件是否可读 canWrite() 方法:判断文件是否可写 isHidden() 方法:判断文件是否为隐藏文件 lastModified() 方法:获得文件的最后修改日期
9 <% String path1 = request.getRealPath("/"); File fp = new File(path1,“index.jsp"); %> 文件 index.jsp 的属性如下: 最后修改日期为:
10 2. 文件的读写 如果编写过一般 Java 应用程序进行文件操作,那 么就很容易掌握本节的内容。因为 JSP 也是利用 Java 的 I/O 机制操作文件,与一般 Java 程序没有什 么大的区别。 Java 所有的 I/O 机制都是基于数据流的, 这些数据流表示了字符或者字节数据的流动序列。 Java 的 I/O 流提供了读写数据的标准方法。 Java.io 是大多数面向数据流的输入 / 输出类的主要 软件包。进行文件操作时,要将这个软件包包含进来 以供使用。
11 1 、读取文件内容 一般说来,有两种方法读取文件内容:一 种是使用 FileInputStream 类,另一种是使用 FileReader 类。 使用 FileInputStream 类 FileInputStream 类是文件输入流,它继承了 InputStream 类。通过 FileInputStream 类, 可以读取文件中的字符。 一个使用 FileInputStream 类读取文件内容的 例子的片断如下:
12 <% byte buf[]=new byte[10000]; try { String path1 = request.getRealPath("/"); File fp = new File(path1,"file1.txt"); FileInputStream fistream = new FileInputStream(fp); int bytesum = fistream.read(buf,0,10000); String str_file = new String(buf,0,bytesum); out.println(str_file); fistream.close(); } catch(IOException e) { out.println(" 文件读错误! "); } %>
13 程序分析如下: 首先创建了一个 byte 类型的字符数组 buf ,并为其 分配了 个字符空间,用来存放从文件读出的 数据。我们将这个数组 buf 的存储空间称为缓冲区, 该缓冲区的容量视需要自己确定。 获得文件 file1.txt 所在的路径,生成一个代表该文 件的 File 类对象,由变量 fp 引用。 调用 FileInputStream 类的构造方法,创建一个 FileInputStream 类型的文件输入流,设置由变 量 fistream 引用。
14 调用 FileInputStream 类的 read() 方法,将文 件 file1.txt 的内容从开头读取 个字符,并 存入到缓冲区 buf 中。 read() 方法的原型为: public int read(byte[] b,int off,int len) throws IOException 创建了一个 String 类型的字符串对象 str_file ,并 将缓冲区中的数据存入到字符串中。 将 str_file 打印输出,也就是 file1.txt 文件的内容。 值得注意的是,程序使用了 try … catch 语句用 来处理异常,如果出现异常,就会输出 “ 文件读错 误! ” 提示信息。
15 使用 FileReader 类 FileReader 类也是 Java 的 I/O 机制中众 多的读写类之一,将它与 BufferedReader 类配 合起来使用,可以逐行读取文件的内容。 下面的这个程序片断就是使用这两个类来读 取 file1.txt 中的内容。
16 <%try{ String path1 = request.getRealPath("/"); File fp = new File(path1,"file1.txt"); FileReader freader = new FileReader(fp); BufferedReader bfdreader = new BufferedReader(freader); String str_line = bfdreader.readLine(); while(str_line!=null) { out.println(str_line); out.println(" "); str_line = bfdreader.readLine(); } bfdreader.close(); freader.close(); } catch(IOException e) { out.println(" 文件读错误! "); }%>
17 程序分析如下: ①获取文件 file1.txt 所在的路径,生成一个代表该文 件的 File 类对象,由变量 fp 引用。 ②调用 FileReader 类的构造方法,创建一个 FileReader 类型的文件读写流,设置由变量 freader 引用。 FileReader 类有多种构造方法,除了实例中使用 的构造方法: FileReader (File file) 还有一种常用的构造方法: FileReader (String name)
18 ③调用 BufferedReader 类的构造方法,创建一个 BufferedReader 对象。 BufferedReader 类是 用来缓存字符以更高效的读取字符串、数组和文本 行。 ④调用 readLine() 方法可以读取每一行的数据,程 序中使用了一个 while 循环,逐行读取 bfdreader 中的字符,并将结果打印出来,当需要换行时就输 出 “ ” 来换行。 ⑤关闭 bfdreader 对象和 freader 对象。
19 2 、写入内容到文件 读者在浏览网页时,经常会遇到需要用户 填写信息的地方,如用户填写对于某产品的意见等, 当用户输入信息并提交后,服务器会将信息保存起来, 保存的办法可以存入数据库,也可以存入文件。 与 FileReader 类相对应, FileWriter 类 是用于文件写的类。通过它,我们可以将内容写入到 指定的文件中。 实例,功能是:用户输入信息,提交后, 服务器将其存入指定的文件中。 采用 HTML+JSP 模式, HTML 网页用于 用户输入信息, JSP 网页接收 HTML 网页表单的信 息,并存入文件。
20 其中, Html 网页编写比较简单。 主要是 JSP 程序,它主要完成两个任务: 接收文本区域的内容,以及将其保存到文件中。 <% String path1 = request.getRealPath("/"); File fp = new File(path1,"file2.txt"); FileWriter fwriter = new FileWriter(fp); request.setCharacterEncoding("GBK"); String str_file = request.getParameter("text"); fwriter.write(str_file); fwriter.close(); out.println(" 已将内容成功写入到文件! "); %>
21 程序分析如下: ①获得文件 file2.txt 所在的路径,生成一个代表该文 件的 File 类对象,由变量 fp 引用。如果指定路径中 没有该文件,则自动创建该文件。 ②调用 FileWriter 类的构造函数,创建一个 FileWriter 对象,设定由 fwriter 引用。 ③在使用 getParameter() 方法取得 text 的内容前, 使用了 setCharacterEncoding() 将其编码设置 为 “ GBK ” ,这是为了防止中文乱码问题。 ④取得 text 的内容并将其放置在字符串变量 str_file 中后,调用 FileWriter 类的 write() 方法将其存 入到指定文件中。
22 ⑤最后,关闭 FileWriter 对象 fwriter ,并打印输出 信息: “ 成功写入内容到文件! ” 。 写入文件例子
23 3. 文件操作应用 无论是 ASP 、 PHP 技术,还是 JSP 技术实现的 Web 应用中,都可能有计数器、留言板等功能。这 些功能都要求将某些信息永久保留起来,保留它们 有两种方法:一种是存入数据库,另一种是存入文 件。后者不涉及数据库的操作,比较简单、方便。 1 、计数器 前面,利用 JavaBean 存在的范围创建过计数器, 但那些计数器有一个致命的缺点:计数器的值不能 永久的保存下来。即使是使用 Application 范围的 JavaBean ,当由于某种原因重新启动服务器后,计 数器中原来的值就会消失,又会从 0 开始计数。
24 为了克服这个缺点,我们利用 JSP 文件操作来编 写一个实用的计数器,该计数器将值存入到文件中, 使计数器中的值不会丢失。 计数器例子
25 2 、留言板 编写一个简单实用的留言板,并将用户的留言存 入文件中。 留言前 留言后
26 一、填空题 1. 在 JSP 中,使用 request 对象的 ___________ 方法可以获得文件夹的物理路径。 2. 在 JSP 文件操作中,要用到 File 类,它存在于包 ___________ 中。 File 类有许多重要的方法,如 ___________ 、 ___________ 、 ___________ 、 ___________ 等,利用这些方 法进行文件操作。 3. 一般说来,有两种方法读取文件内容:一种是使用 ___________ 类,另一种是使用 ___________ 类。
LOGO