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: 实验