servlet文件操作

在JSP开发过程中,经常会遇到需要把相关内容存储为文件的情况,在JSP中是输入输出流进行操作的,在Servlet中叶可以使用输入输出流实现对文件的读写,同时使用Servlet还可以很方便地实现文件的上传下载。

读取文件

代码:

package com.foxmail.xxy668;  
  
import java.io.BufferedReader;  
import java.io.File;  
import java.io.FileReader;  
import java.io.IOException;  
import java.io.PrintWriter;  
  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
public class FileRead extends HttpServlet {  
  
    @Override  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        response.setContentType("text/html");  
        response.setCharacterEncoding("gb2312");  
        PrintWriter out=response.getWriter();  
        String fileName="content.txt";  
        String realPath=request.getRealPath(fileName);  
  
        File file=new File(realPath);  
        if(file.exists()){  
            FileReader reader=new FileReader(file);  
            BufferedReader bufferedReader=new BufferedReader(reader);  
            String line =null;  
            while((line=bufferedReader.readLine())!=null)  
            {  
                out.print("<font size='2'>"+line+"</font><br>");;;  
            }  
        }else{  
            out.print("file is not exist!");  
        }  
    }  
  
    @Override  
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
            throws ServletException, IOException {  
        doGet(req,resp);  
    }  
}  




实现思路:

1、用文件的绝对路径构造出一个文件读取对象,如果文件存在则将进行文件的读取

2、为了提高文件读取的效率,提供了一个字符输入缓冲流类,这个类就是BufferedReader,一般情况下BufferedReader和FileReader结合使用,在上面的代码中使用一个FIleReader对象构造出一个BufferedReader对象。

3、通过BufferedReader类中的readerLine方法以及循环将BufferedReader对象的字符逐行读出,打印到页面中。

 

写入文件

代码:

package com.foxmail.xxy668;  
  
import java.io.BufferedWriter;  
import java.io.File;  
import java.io.FileWriter;  
import java.io.IOException;  
import java.io.PrintWriter;  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
public class FileWrite extends HttpServlet {  
  
    @Override  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        response.setCharacterEncoding("gb2312");  
        PrintWriter out=response.getWriter();  
        String fileName="new.txt";  
        String realPath=request.getRealPath(fileName);  
        File file=new File(realPath);  
        FileWriter writer=new FileWriter(file);  
        BufferedWriter bufferedWriter=new BufferedWriter(writer);  
        bufferedWriter.write("computer internet");  
        bufferedWriter.newLine();  
        bufferedWriter.write("mathematics");  
        bufferedWriter.flush();  
        writer.close();  
        out.print("<font size='2'>"+file.getAbsolutePath()+"</font>");  
  
    }  
  
    @Override  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        doGet(request,response);  
    }  
}  






实现思路:

1、和读取文件思路类似,首先用文件的路径构造一个文件对象(没有在硬盘上生成)

2、根据文件对象构造一个FileWriter文件爱你读取对象,同样为了提高文件爱你写操作效率,根据FileWriter对象构造一个BufferedWrite对象。

3、在BufferedWriter对象韩总写入字符串(在内存中进行),通过刷新字符输入缓冲区内容,这时把内容中的文件输出到硬盘。

4、释放资源,关闭FileWriter和BufferWriter对象。

 

文件上传

文件的上传下载在Web开发中会经常遇到,使用基本的I/O输入输出当然可以完成这项操作,但是对于开发的效率和程序运行效率方面考虑,在实际的开发过程中一般采用第三方的组件来完成这个上传的功能。

在实际开发过程中用的比较多的是commons-fileupload组件和jspSmartUpload组件,这两个组件都可以很好地完成文件上传的功能。这里我们以前者为例,配合这个组件的使用的另一个组件是commons-io组件。需要的jar包如下图所示

 

代码: 

package com.foxmail.xxy668;  
  
import java.io.File;  
import java.io.IOException;  
import java.io.PrintWriter;  
import java.util.Iterator;  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
import org.apache.commons.fileupload.FileItem;  
import org.apache.commons.fileupload.FileItemFactory;  
import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
import org.apache.commons.fileupload.servlet.ServletFileUpload;  
  
public class FileUpload extends HttpServlet {  
    @Override  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        boolean isMultipart =ServletFileUpload.isMultipartContent(request);  
        if(isMultipart){  
            FileItemFactory factory=new DiskFileItemFactory();  
            ServletFileUpload upload=new ServletFileUpload(factory);  
            Iterator items;  
            try{  
                items=upload.parseRequest(request).iterator();  
                while(items.hasNext()){  
                    FileItem item=(FileItem) items.next();  
                    if(!item.isFormField()){  
                        String name=item.getName();  
                        String fileName=name.substring(name.lastIndexOf('\\')+1,name.length());  
                        String path=request.getRealPath("file")+File.separatorChar+fileName;  
  
                        File uploadedFile=new File(path);  
                        item.write(uploadedFile);  
  
                        response.setContentType("text/html");  
                        response.setCharacterEncoding("gb2312");  
                        PrintWriter out=response.getWriter();  
                        out.print("<font size='2'>upload the file is:"+name+"<br>");  
                        out.print("save the path is:"+path+"</font>");  
  
                    }  
                }  
            }catch(Exception e){  
                e.printStackTrace();  
            }  
        }  
    }  
}  






实现思路:

1、判断提交过来的表单是否为文件上传表单,如果不是文件爱你上传表单,在后续的处理中就不再用文件上传功能来处理这个表单。

2、构造文件文件上传处理对象。

3、解析出表单中提交所有文件内容。

4、根据文件的路径将上传的文件储存到服务器中,完成上传操作。

 

文件下载

用Servlet下载文件的时候并不需要第三方组件的帮助,只需要对服务器的响应对象response进行简单的设置即可。

代码

package com.foxmail.xxy668;  
  
import java.io.IOException;  
  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
public class FileDownload extends HttpServlet {  
  
    @Override  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        try{  
            String fname="test.xls";  
            response.setCharacterEncoding("UTF-8");  
            fname =java.net.URLEncoder.encode(fname,"UTF-8");  
            response.setHeader("Content-Disposition","attachment;filename="+fname);  
            response.setContentType("application/msexcel");  
        }catch(Exception e){  
            System.out.println(e);  
        }  
    }  
}  




实现思路:

1、第19行指明了这个Servlet的功能是输出文件,并且指明文件的位置。

2、第20行指明了要输入文件的类型,其中application/msexcel就是Excel文件的MIME类型描述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值