文件操作

Download Report

Transcript 文件操作

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