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