JSP
网页应用程序开发
网页应用程序开发
实验目的:掌握文件的读写操作相关类的使用
1 使用字节流读写文件
使用文件输入/输出流FileInputStream/FileOutStream以字节为单位的读写文件,实现“在线文件柜”功能
在应用程序根目录下创建files文件夹作为“在线文件柜”目录,再创建首页文件index.jsp,在页顶添加代码引入所需类包:
<%@ page import="java.io.*" %>
在页面中添加表单,在表单中添加文本域newname及提交按钮:
在页面中添加代码,实现文件列表、新建和删除等基本操作:
<%
//在线文件柜目录
String myfiles = application.getRealPath("/files/");
File dir = new File(myfiles);
//根据用户提交的名字新建文件
String newname = request.getParameter("newname");
if (newname != null && newname != "" ) {
File newFile = new File(myfiles, newname);
newFile.createNewFile();
}
else {
//根据用户提交的名字删除文件
String delname = request.getParameter("delname");
if (delname != null && delname != "" ) {
byte del[] = delname.getBytes("iso-8859-1");
delname = new String(del, "utf-8");
File delFile = new File(myfiles, delname);
delFile.delete();
}
}
//列出在线文件柜目录下的文件
File file[] = dir.listFiles();
for (int i = 0; i < file.length; i++) {
if (file[i].isFile()) {
out.print("<a href='content.jsp?filename=" + file[i].getName().toString() + "'>");
out.print(file[i].getName().toString() + "</a> - " + file[i].length() + "字节 ");
out.print("<a href='?delname=" + file[i].getName().toString() + "'>删除</a><br />");
}
}
%>
创建查看和编辑文件内容页content.jsp,在页顶添加代码引入所需类包:
<%@ page import="java.io.*" %>
在页面中添加表单,在表单中添加文本区域content及提交按钮:
在文本区域标签内添加代码,实现文件内容的读取和写入:
<%
//在线文件柜目录
String myfiles = application.getRealPath("/files/");
File dir = new File(myfiles);
String content = request.getParameter("content");
String filename = request.getParameter("filename");
//根据用户提交的内容,以字节流写入原文件
if (content != null) {
File f = new File(myfiles, filename);
try {
FileOutputStream o = new FileOutputStream(f);
BufferedOutputStream bo = new BufferedOutputStream(o);
byte c[] = content.getBytes();
bo.write(c);
bo.flush();
bo.close();
o.close();
}
catch(IOException e) {}
}
//根据用户提交的文件名,以字节流读取文件并显示
if (filename != null && filename != "" ) {
File f = new File(myfiles, filename);
try {
FileInputStream i = new FileInputStream(f);
BufferedInputStream bi = new BufferedInputStream(i);
byte b[] = new byte[100];
int n = 0;
while ((n = bi.read(b)) != -1) {
String temp = new String(b, 0, n);
out.print(temp);
}
bi.close();
i.close();
}
catch(IOException e) {}
}
%>
在浏览器中运行index.jsp即可显示files目录下的文件列表并进行各种操作:
2 使用字符流读写文件
使用字节流读写文件在处理汉字时会出现乱码。本例修改上例的content.jsp文件,使用字符流类InputStreamReader/OutputStreamWriter读写文件。
<%
//在线文件柜目录
String myfiles = application.getRealPath("/files/");
File dir = new File(myfiles);
String content = request.getParameter("content");
String filename = request.getParameter("filename");
//根据用户提交的内容,以字符流写入原文件
if (content != null) {
byte b[] = content.getBytes("iso-8859-1");
content = new String(b, "utf-8");
File f = new File(myfiles, filename);
try {
OutputStreamWriter w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
BufferedWriter bw = new BufferedWriter(w);
bw.write(content);
bw.close();
w.close();
}
catch(IOException e) {}
}
//根据用户提交的文件名,以字符流读取文件并显示
if (filename != null && filename != "" ) {
File f = new File(myfiles, filename);
StringBuffer mess = new StringBuffer();
try {
InputStreamReader r = new InputStreamReader(new FileInputStream(f), "utf-8");
BufferedReader br = new BufferedReader(r);
String temp;
while ((temp = br.readLine()) != null) {
mess.append(temp + "\n");
}
br.close();
r.close();
}
catch(IOException e) {}
out.print(new String(mess));
}
%>
3 使用数据流读写数据
本例修改上例的content.jsp文件,使用数据流类DataInputStream/DataOutputStream以Java原始数据的形式显示和保存字符串。
<%
//在线文件柜目录
String myfiles = application.getRealPath("/files/");
File dir = new File(myfiles);
String content = request.getParameter("content");
String filename = request.getParameter("filename");
//根据用户提交的内容,以数据流写入原文件
if (content != null) {
byte b[] = content.getBytes("iso-8859-1");
content = new String(b, "utf-8");
File f = new File(myfiles, filename);
try {
FileOutputStream o = new FileOutputStream(f);
DataOutputStream datao = new DataOutputStream(o);
datao.writeUTF(content);
datao.close();
o.close();
}
catch(IOException e) {}
}
//根据用户提交的文件名,以数据流读取文件并显示
if (filename != null && filename != "" ) {
File f = new File(myfiles, filename);
try {
FileInputStream i = new FileInputStream(f);
DataInputStream datai = new DataInputStream(i);
out.print(datai.readUTF());
datai.close();
i.close();
}
catch(IOException e) {}
}
%>
博主 in 教程 04:08下午 10月 15, 2012
Tags: 实验