JSP操作文件

由于JSP能使用Java的IO系统,所以在JSP中对文件的操作和一般Java程序没有什么大的区别。
操作文件主要有两种类型,一种是读取内容,另一种是写入内容或者更改文件的属性。

[b]1. 读取文件的内容[/b]
在读取文件的时,可以有两种选择方式,一种是通过ServletContext读取,另一种是直接使用java.io.FileReader等对象。前者只能读取Servlet上下文中的文件,后者可以读取任何位置的文件。

[b]1. 使用ServletContext[/b]
这种方式只能获得Servlet上下文之内的资源。例如
使用ServletContext读取文件(readFile.jsp)

<%@ page contentType="text/html;charset=gb2312" import="java.io.*"%>
<%
try{

//使用ServletContext装入文件资源
InputStream in = getServletContext().getResourceAsStream("/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(java.lang.String path)方法来访问给定的资源。这里的path参数必须以"/"开始。
这个方法和Java.lang.Class.getResourceAsStream方法不同,后者使用ClassLoader获得指定的资源。
在上面的代码中使用InputStream对象,如果在读取后不对字符进行重新编码,那么对中文讲出现乱码的问题。而且没有使用缓冲的输入流,它的效率较低。
下面看看使用带缓冲的输入流读取文件资源

<%@ page contentType="text/html;charset=gb2312" import="java.io.*"%>
<%
try{

//使用ServletContext装入文件资源
InputStream in = getServletContext().getResourceAsStream("/file.txt");
String file = "";
int temp = "";

BufferedReader buffer = new BufferReader( new InputStreamReader(new BufferedInputStream(in)));
while( (temp = buffer.readLine()) != null)
{
file += temp;
}
buffer.close();
in.close();
out.println(file);
out.flush();
}
catch(Exception e){

out.println(e);
e.printStackTrace();
}
%>

以这种方式不仅速度快,占用系统资源少,而且不会出现中文乱码问题。

[b]2 使用FileReader[/b]
可以在JSP页面中使用FileReader和FileInputStream等类读取文件的内容。由于FileReader具有比FileInputStream更好的性能,在这里使用FileReader读取文件的内容。例如:

<%@ page contentType="text/html;charset=gb2312" import="java.io.*" buffer="64kb"%>
<%
try{
BufferReader in = new BufferedReader(new FileReader("c:\\UserSession.java"));

String file = "";
String temp = "";
while((temp = in.readLine()) != null){
file += temp;
}
in.close();
out.println(file);
out.flush();
}
catch(Exception e){
out.println(e);
e.printStackTrace();
}
%>


[b]3. 写入内容到文件[/b]
通过FileWrite对象或者FileOutputStream把内容输入到文件中。
以下是writerFile.jsp页面

<%@ page contentType="text/html;charset=gb2312" import="java.io.*" %>
<html>
<body>
<%
request.setCharacterEncoding( "gb2312" );
String content = request.getParameter( "content" );
%>

<%
try{
PrintWriter writer = new PrintWriter(new BufferWriter(new FileWriter( "c:\\foo.out" )));
writer.write(content);
writer.close();
out.println("已经把内容写到c:\\foo.out");
}
catch(Exception e){
out.println(e);
e.printStackTrace();
}
%>
<form action="writerFile.jsp" method=post>
<textarea name=content cols=20 row=5></textarea><br>
<input type = submit value=提交>
</form>
</body>
</html>

但是每次写入新的内容时,会把原来的内容删除,如果想不删除,那么改变以下的代码
PrintWriter writer = new PrintWriter(new BufferWriter(new FileWriter("c:\\foo.out",true)))
就是在FileWriter的构造方法中增加true关键字,就能将新写入的内容追加到原来的文件后面。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值