struts2.0(100-108)

/默认inline内联直接在窗口打开;attachment表示提供下载框共用户下载

              <param name="inputName">downloadFile</param>

           </result>

       </action>

第二种方式,直接在内存中处理掉:(用线程的方式删掉)

在实现类中处理:

服务类的实现

package com.test.service.impl;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.List;

 

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

 

import com.test.bean.User;

import com.test.dao.UserDAO;

import com.test.service.UserService;

 

public class UserServiceImpl implements UserService

{

    private UserDAO userDao;

 

    public UserDAO getUserDao()

    {

       return userDao;

    }

 

    public void setUserDao(UserDAO userDao)

    {

       this.userDao = userDao;

    }

 

    public List<User> findAll()

    {

       return this.userDao.findAllUsers();

    }

 

    public InputStream getInputStream()

    {

       HSSFWorkbook wb = new HSSFWorkbook();//创建对象

       HSSFSheet sheet = wb.createSheet("sheet1");//创建sheet

 

       HSSFRow row = sheet.createRow(0);//创建行

 

       HSSFCell cell = row.createCell((short) 0);//创建单元格

       cell.setEncoding(HSSFCell.ENCODING_UTF_16);//设置字符编码

       cell.setCellValue("序号");

 

       cell = row.createCell((short) 1);

       cell.setEncoding(HSSFCell.ENCODING_UTF_16);

       cell.setCellValue("");

 

       cell = row.createCell((short) 2);

       cell.setEncoding(HSSFCell.ENCODING_UTF_16);

       cell.setCellValue("");

 

       cell = row.createCell((short) 3);

       cell.setEncoding(HSSFCell.ENCODING_UTF_16);

       cell.setCellValue("年龄");

 

       List<User> list = this.findAll();//得到说有用户信息

//把数值放到表格里面

       for (int i = 0; i < list.size(); ++i)

       {

           User user = list.get(i);

 

           row = sheet.createRow(i + 1);//创建行

 

           cell = row.createCell((short) 0);

           cell.setEncoding(HSSFCell.ENCODING_UTF_16);

           cell.setCellValue(i + 1);

 

           cell = row.createCell((short) 1);

           cell.setEncoding(HSSFCell.ENCODING_UTF_16);

           cell.setCellValue(user.getFirstname());

 

           cell = row.createCell((short) 2);

           cell.setEncoding(HSSFCell.ENCODING_UTF_16);

           cell.setCellValue(user.getLastname());

 

           cell = row.createCell((short) 3);

           cell.setEncoding(HSSFCell.ENCODING_UTF_16);

           cell.setCellValue(user.getAge());

       }

//设置导出文件

 

//     String fileName = RandomStringUtils.randomAlphanumeric(10);

//

//     fileName = new StringBuffer(fileName).append(".xls").toString();

//

//     final File file = new File(fileName);

//

//     try

//     {

//         OutputStream os = new FileOutputStream(file);

//         wb.write(os);

//         os.close();

//     }

//     catch (Exception e)

//     {

//         e.printStackTrace();

//     }

//

//     InputStream is = null;

//     try

//     {

//         is = new FileInputStream(file);

//     }

//     catch (FileNotFoundException e)

//     {

//         e.printStackTrace();

//     }

//

//     new Thread(new Runnable()

//     {

//         public void run()

//         {

//            try

//            {

//                Thread.sleep(15000);

//            }

//            catch (InterruptedException e)

//            {

//                e.printStackTrace();

//            }

//           

//            file.delete();//删除临时文件

//         }

//     }).start();

//

//     return is;

 

    }

 

}

 

上面存在的问题是,当服务器关掉时还不能关掉线程,那么文件依然保留

 

解决办法在服务器启动的时候,就删除存在类似文件名的文件

建立servlet

package com.test.servlet;

 

 

import java.io.File;

import java.io.FileFilter;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

 

public class DeleteFilesServlet extends HttpServlet

{

 

    public void destroy()

    {

      

    }

 

    public void init() throws ServletException

    {

    //第一种办法

//     File file = new File(".");//当前文件

//    

//     File[] subFiles = file.listFiles();

//    

//     for(File f : subFiles)

//     {

//         if(f.getName().endsWith("xls"))

//         {

//            f.delete();

//         }

//     }

       //第二种办法

       File file = new File(".");

      

       File[] subFiles = file.listFiles(new FileFilter()//遍历要过滤的文件

       {

           public boolean accept(File pathname)//实现里面的类

           {

              if(pathname.getName().endsWith("xls"))

              {

                  return true;//将选对应的文件放入返回列表里面

              }

             

              return false;

           }

       }

       );

      

       for(File f : subFiles)

       {

           f.delete();

       }

    }

 

}

Web.xml

  <servlet>

    <servlet-name>DeleteFilesServlet</servlet-name>

    <servlet-class>com.test.servlet.DeleteFilesServlet</servlet-class>

    <load-on-startup>8</load-on-startup>

  </servlet>//不需要mapping要把它删掉

 

第二种方式:推荐使用

实现类:

 

package com.test.service.impl;

 

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.List;

 

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

 

import com.test.bean.User;

import com.test.dao.UserDAO;

import com.test.service.UserService;

 

public class UserServiceImpl implements UserService

{

    private UserDAO userDao;

 

    public UserDAO getUserDao()

    {

       return userDao;

    }

 

    public void setUserDao(UserDAO userDao)

    {

       this.userDao = userDao;

    }

 

    public void delete(User user)

    {

       this.userDao.removeUser(user);

    }

 

    public List<User> findAll()

    {

       return this.userDao.findAllUsers();

    }

 

    public User findById(Integer id)

    {

       return this.userDao.findUserById(id);

    }

 

    public void save(User user)

    {

       this.userDao.saveUser(user);

    }

 

    public void update(User user)

    {

       this.userDao.updateUser(user);

    }

 

    public InputStream getInputStream()

    {

       HSSFWorkbook wb = new HSSFWorkbook();

       HSSFSheet sheet = wb.createSheet("sheet1");

 

       HSSFRow row = sheet.createRow(0);

 

       HSSFCell cell = row.createCell((short) 0);

       cell.setEncoding(HSSFCell.ENCODING_UTF_16);

       cell.setCellValue("序号");

 

       cell = row.createCell((short) 1);

       cell.setEncoding(HSSFCell.ENCODING_UTF_16);

       cell.setCellValue("");

 

       cell = row.createCell((short) 2);

       cell.setEncoding(HSSFCell.ENCODING_UTF_16);

       cell.setCellValue("");

 

       cell = row.createCell((short) 3);

       cell.setEncoding(HSSFCell.ENCODING_UTF_16);

       cell.setCellValue("年龄");

 

       List<User> list = this.findAll();

 

       for (int i = 0; i < list.size(); ++i)

       {

           User user = list.get(i);

 

           row = sheet.createRow(i + 1);

 

           cell = row.createCell((short) 0);

           cell.setEncoding(HSSFCell.ENCODING_UTF_16);

           cell.setCellValue(i + 1);

 

           cell = row.createCell((short) 1);

           cell.setEncoding(HSSFCell.ENCODING_UTF_16);

           cell.setCellValue(user.getFirstname());

 

           cell = row.createCell((short) 2);

           cell.setEncoding(HSSFCell.ENCODING_UTF_16);

           cell.setCellValue(user.getLastname());

 

           cell = row.createCell((short) 3);

           cell.setEncoding(HSSFCell.ENCODING_UTF_16);

           cell.setCellValue(user.getAge());

       }

       //第二种办法,直接输出到内存里面

       ByteArrayOutputStream os = new ByteArrayOutputStream();

      

       try

       {

           wb.write(os);//写到数组里面

       }

       catch (IOException e)

       {

           e.printStackTrace();

       }

       byte[] content = os.toByteArray();

      

       InputStream is = new ByteArrayInputStream(content);

      

       return is;

//第一种办法 ,会导致部分内容缺失,和excel出问题

//     byte[] content = wb.getBytes();

//     InputStream is = new ByteArrayInputStream(content);

//    

//     return is;

      

    }

 

}

版权归------------向先函-----------------所有

结束日期2010-1-24

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值