JSP

网页应用程序开发

JSP实验05 文件操作示例

实验目的:掌握文件的读写操作相关类的使用

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) {}
}
%>
评论:

发表评论:
该文章禁用评论功能。