zoukankan      html  css  js  c++  java
  • Java POI 导出EXCEL经典实现 Java导出Excel

    转自http://blog.csdn.net/evangel_z/article/details/7332535

    在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下。(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^)

             呵呵,首先我们来导出EXCEL格式的文件吧。现在主流的操作Excel文件的开源工具有很多,用得比较多的就是Apache的POI及JExcelAPI。这里我们用Apache POI!我们先去Apache的大本营下载POI的jar包:http://poi.apache.org/ ,我这里使用的是3.0.2版本。

            将3个jar包导入到classpath下,什么?忘了怎么导包?不会吧!好,我们来写一个导出Excel的实用类(所谓实用,是指基本不用怎么修改就可以在实际项目中直接使用的!)。我一直强调做类也好,做方法也好,一定要通用性和灵活性强。下面这个类就算基本贯彻了我的这种思想。那么,熟悉许老师风格的人应该知道,这时候该要甩出一长串代码了。没错,大伙请看:

     1 import java.util.Date;
     2 
     3 public class Student
     4 {
     5     private long id;
     6     private String name;
     7     private int age;
     8     private boolean sex;
     9     private Date birthday;
    10 
    11     public Student()
    12     {
    13     }
    14 
    15     public Student(long id, String name, int age, boolean sex, Date birthday)
    16     {
    17         this.id = id;
    18         this.name = name;
    19         this.age = age;
    20         this.sex = sex;
    21         this.birthday = birthday;
    22     }
    23 
    24     public long getId()
    25     {
    26         return id;
    27     }
    28 
    29     public void setId(long id)
    30     {
    31         this.id = id;
    32     }
    33 
    34     public String getName()
    35     {
    36         return name;
    37     }
    38 
    39     public void setName(String name)
    40     {
    41         this.name = name;
    42     }
    43 
    44     public int getAge()
    45     {
    46         return age;
    47     }
    48 
    49     public void setAge(int age)
    50     {
    51         this.age = age;
    52     }
    53 
    54     public boolean getSex()
    55     {
    56         return sex;
    57     }
    58 
    59     public void setSex(boolean sex)
    60     {
    61         this.sex = sex;
    62     }
    63 
    64     public Date getBirthday()
    65     {
    66         return birthday;
    67     }
    68 
    69     public void setBirthday(Date birthday)
    70     {
    71         this.birthday = birthday;
    72     }
    73 
    74 }
     1 public class Book
     2 {
     3     private int bookId;
     4     private String name;
     5     private String author;
     6     private float price;
     7     private String isbn;
     8     private String pubName;
     9     private byte[] preface;
    10 
    11     public Book()
    12     {
    13     }
    14 
    15     public Book(int bookId, String name, String author, float price,
    16             String isbn, String pubName, byte[] preface)
    17     {
    18         this.bookId = bookId;
    19         this.name = name;
    20         this.author = author;
    21         this.price = price;
    22         this.isbn = isbn;
    23         this.pubName = pubName;
    24         this.preface = preface;
    25     }
    26 
    27     public int getBookId()
    28     {
    29         return bookId;
    30     }
    31 
    32     public void setBookId(int bookId)
    33     {
    34         this.bookId = bookId;
    35     }
    36 
    37     public String getName()
    38     {
    39         return name;
    40     }
    41 
    42     public void setName(String name)
    43     {
    44         this.name = name;
    45     }
    46 
    47     public String getAuthor()
    48     {
    49         return author;
    50     }
    51 
    52     public void setAuthor(String author)
    53     {
    54         this.author = author;
    55     }
    56 
    57     public float getPrice()
    58     {
    59         return price;
    60     }
    61 
    62     public void setPrice(float price)
    63     {
    64         this.price = price;
    65     }
    66 
    67     public String getIsbn()
    68     {
    69         return isbn;
    70     }
    71 
    72     public void setIsbn(String isbn)
    73     {
    74         this.isbn = isbn;
    75     }
    76 
    77     public String getPubName()
    78     {
    79         return pubName;
    80     }
    81 
    82     public void setPubName(String pubName)
    83     {
    84         this.pubName = pubName;
    85     }
    86 
    87     public byte[] getPreface()
    88     {
    89         return preface;
    90     }
    91 
    92     public void setPreface(byte[] preface)
    93     {
    94         this.preface = preface;
    95     }
    96 }

    上面这两个类一目了然,就是两个简单的javabean风格的类。再看下面真正的重点类:

    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    import javax.swing.JOptionPane;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
    import org.apache.poi.hssf.usermodel.HSSFComment;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    import org.apache.poi.hssf.usermodel.HSSFPatriarch;
    import org.apache.poi.hssf.usermodel.HSSFRichTextString;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.util.HSSFColor;
    
    /**
     * 利用开源组件POI3.0.2动态导出EXCEL文档 转载时请保留以下信息,注明出处!
     * 
     * @author leno
     * @version v1.0
     * @param <T>
     *            应用泛型,代表任意一个符合javabean风格的类
     *            注意这里为了简单起见,boolean型的属性xxx的get器方式为getXxx(),而不是isXxx()
     *            byte[]表jpg格式的图片数据
     */
    public class ExportExcel<T>
    {
        public void exportExcel(Collection<T> dataset, OutputStream out)
        {
            exportExcel("测试POI导出EXCEL文档", null, dataset, out, "yyyy-MM-dd");
        }
    
        public void exportExcel(String[] headers, Collection<T> dataset,
                OutputStream out)
        {
            exportExcel("测试POI导出EXCEL文档", headers, dataset, out, "yyyy-MM-dd");
        }
    
        public void exportExcel(String[] headers, Collection<T> dataset,
                OutputStream out, String pattern)
        {
            exportExcel("测试POI导出EXCEL文档", headers, dataset, out, pattern);
        }
    
        /**
         * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上
         * 
         * @param title
         *            表格标题名
         * @param headers
         *            表格属性列名数组
         * @param dataset
         *            需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的
         *            javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据)
         * @param out
         *            与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
         * @param pattern
         *            如果有时间数据,设定输出格式。默认为"yyy-MM-dd"
         */
        @SuppressWarnings("unchecked")
        public void exportExcel(String title, String[] headers,
                Collection<T> dataset, OutputStream out, String pattern)
        {
            // 声明一个工作薄
            HSSFWorkbook workbook = new HSSFWorkbook();
            // 生成一个表格
            HSSFSheet sheet = workbook.createSheet(title);
            // 设置表格默认列宽度为15个字节
            sheet.setDefaultColumnWidth((short) 15);
            // 生成一个样式
            HSSFCellStyle style = workbook.createCellStyle();
            // 设置这些样式
            style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
            style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            style.setBorderRight(HSSFCellStyle.BORDER_THIN);
            style.setBorderTop(HSSFCellStyle.BORDER_THIN);
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            // 生成一个字体
            HSSFFont font = workbook.createFont();
            font.setColor(HSSFColor.VIOLET.index);
            font.setFontHeightInPoints((short) 12);
            font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            // 把字体应用到当前的样式
            style.setFont(font);
            // 生成并设置另一个样式
            HSSFCellStyle style2 = workbook.createCellStyle();
            style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
            style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
            style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
            style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            // 生成另一个字体
            HSSFFont font2 = workbook.createFont();
            font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
            // 把字体应用到当前的样式
            style2.setFont(font2);
    
            // 声明一个画图的顶级管理器
            HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
            // 定义注释的大小和位置,详见文档
            HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0,
                    0, 0, 0, (short) 4, 2, (short) 6, 5));
            // 设置注释内容
            comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));
            // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.
            comment.setAuthor("leno");
    
            // 产生表格标题行
            HSSFRow row = sheet.createRow(0);
            for (short i = 0; i < headers.length; i++)
            {
                HSSFCell cell = row.createCell(i);
                cell.setCellStyle(style);
                HSSFRichTextString text = new HSSFRichTextString(headers[i]);
                cell.setCellValue(text);
            }
    
            // 遍历集合数据,产生数据行
            Iterator<T> it = dataset.iterator();
            int index = 0;
            while (it.hasNext())
            {
                index++;
                row = sheet.createRow(index);
                T t = (T) it.next();
                // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
                Field[] fields = t.getClass().getDeclaredFields();
                for (short i = 0; i < fields.length; i++)
                {
                    HSSFCell cell = row.createCell(i);
                    cell.setCellStyle(style2);
                    Field field = fields[i];
                    String fieldName = field.getName();
                    String getMethodName = "get"
                            + fieldName.substring(0, 1).toUpperCase()
                            + fieldName.substring(1);
                    try
                    {
                        Class tCls = t.getClass();
                        Method getMethod = tCls.getMethod(getMethodName,
                                new Class[]
                                {});
                        Object value = getMethod.invoke(t, new Object[]
                        {});
                        // 判断值的类型后进行强制类型转换
                        String textValue = null;
                        // if (value instanceof Integer) {
                        // int intValue = (Integer) value;
                        // cell.setCellValue(intValue);
                        // } else if (value instanceof Float) {
                        // float fValue = (Float) value;
                        // textValue = new HSSFRichTextString(
                        // String.valueOf(fValue));
                        // cell.setCellValue(textValue);
                        // } else if (value instanceof Double) {
                        // double dValue = (Double) value;
                        // textValue = new HSSFRichTextString(
                        // String.valueOf(dValue));
                        // cell.setCellValue(textValue);
                        // } else if (value instanceof Long) {
                        // long longValue = (Long) value;
                        // cell.setCellValue(longValue);
                        // }
                        if (value instanceof Boolean)
                        {
                            boolean bValue = (Boolean) value;
                            textValue = "男";
                            if (!bValue)
                            {
                                textValue = "女";
                            }
                        }
                        else if (value instanceof Date)
                        {
                            Date date = (Date) value;
                            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                            textValue = sdf.format(date);
                        }
                        else if (value instanceof byte[])
                        {
                            // 有图片时,设置行高为60px;
                            row.setHeightInPoints(60);
                            // 设置图片所在列宽度为80px,注意这里单位的一个换算
                            sheet.setColumnWidth(i, (short) (35.7 * 80));
                            // sheet.autoSizeColumn(i);
                            byte[] bsValue = (byte[]) value;
                            HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,
                                    1023, 255, (short) 6, index, (short) 6, index);
                            anchor.setAnchorType(2);
                            patriarch.createPicture(anchor, workbook.addPicture(
                                    bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));
                        }
                        else
                        {
                            // 其它数据类型都当作字符串简单处理
                            textValue = value.toString();
                        }
                        // 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成
                        if (textValue != null)
                        {
                            Pattern p = Pattern.compile("^//d+(//.//d+)?$");
                            Matcher matcher = p.matcher(textValue);
                            if (matcher.matches())
                            {
                                // 是数字当作double处理
                                cell.setCellValue(Double.parseDouble(textValue));
                            }
                            else
                            {
                                HSSFRichTextString richString = new HSSFRichTextString(
                                        textValue);
                                HSSFFont font3 = workbook.createFont();
                                font3.setColor(HSSFColor.BLUE.index);
                                richString.applyFont(font3);
                                cell.setCellValue(richString);
                            }
                        }
                    }
                    catch (SecurityException e)
                    {
                        e.printStackTrace();
                    }
                    catch (NoSuchMethodException e)
                    {
                        e.printStackTrace();
                    }
                    catch (IllegalArgumentException e)
                    {
                        e.printStackTrace();
                    }
                    catch (IllegalAccessException e)
                    {
                        e.printStackTrace();
                    }
                    catch (InvocationTargetException e)
                    {
                        e.printStackTrace();
                    }
                    finally
                    {
                        // 清理资源
                    }
                }
            }
            try
            {
                workbook.write(out);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args)
        {
            // 测试学生
            ExportExcel<Student> ex = new ExportExcel<Student>();
            String[] headers =
            { "学号", "姓名", "年龄", "性别", "出生日期" };
            List<Student> dataset = new ArrayList<Student>();
            dataset.add(new Student(10000001, "张三", 20, true, new Date()));
            dataset.add(new Student(20000002, "李四", 24, false, new Date()));
            dataset.add(new Student(30000003, "王五", 22, true, new Date()));
            // 测试图书
            ExportExcel<Book> ex2 = new ExportExcel<Book>();
            String[] headers2 =
            { "图书编号", "图书名称", "图书作者", "图书价格", "图书ISBN", "图书出版社", "封面图片" };
            List<Book> dataset2 = new ArrayList<Book>();
            try
            {
                BufferedInputStream bis = new BufferedInputStream(
                        new FileInputStream("V://book.bmp"));
                byte[] buf = new byte[bis.available()];
                while ((bis.read(buf)) != -1)
                {
                    //
                }
                dataset2.add(new Book(1, "jsp", "leno", 300.33f, "1234567",
                        "清华出版社", buf));
                dataset2.add(new Book(2, "java编程思想", "brucl", 300.33f, "1234567",
                        "阳光出版社", buf));
                dataset2.add(new Book(3, "DOM艺术", "lenotang", 300.33f, "1234567",
                        "清华出版社", buf));
                dataset2.add(new Book(4, "c++经典", "leno", 400.33f, "1234567",
                        "清华出版社", buf));
                dataset2.add(new Book(5, "c#入门", "leno", 300.33f, "1234567",
                        "汤春秀出版社", buf));
    
                OutputStream out = new FileOutputStream("E://a.xls");
                OutputStream out2 = new FileOutputStream("E://b.xls");
                ex.exportExcel(headers, dataset, out);
                ex2.exportExcel(headers2, dataset2, out2);
                out.close();
                JOptionPane.showMessageDialog(null, "导出成功!");
                System.out.println("excel导出成功!");
            }
            catch (FileNotFoundException e)
            {
                e.printStackTrace();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }

     写完之后,如果您不是用eclipse工具生成的Servlet,千万别忘了在web.xml上注册这个Servelt。而且同样的,拷贝一张小巧的图书图片命名为book.jpg放置到当前WEB根目录的/WEB-INF/下。部署好web工程,用浏览器访问Servlet看下效果吧!是不是下载成功了。呵呵,您可以将下载到本地的excel报表用打印机打印出来,这样您就大功告成了。完事了我们就思考:我们发现,我们做的方法,不管是本地调用,还是在WEB服务器端用Servlet调用;不管是输出学生列表,还是图书列表信息,代码都几乎一样,而且这些数据我们很容器结合后台的DAO操作数据库动态获取。恩,类和方法的通用性和灵活性开始有点感觉了。好啦,祝您学习愉快!

    简单版 无excel格式样式设置  及excel下载

      1 package com.howbuy.uaa.utils;
      2 
      3 import java.io.BufferedInputStream;
      4 import java.io.BufferedOutputStream;
      5 import java.io.File;
      6 import java.io.FileInputStream;
      7 import java.io.IOException;
      8 import java.io.InputStream;
      9 import java.io.OutputStream;
     10 import java.lang.reflect.Field;
     11 import java.lang.reflect.InvocationTargetException;
     12 import java.lang.reflect.Method;
     13 import java.text.SimpleDateFormat;
     14 import java.util.Collection;
     15 import java.util.Date;
     16 import java.util.Iterator;
     17 import java.util.regex.Matcher;
     18 import java.util.regex.Pattern;
     19 
     20 import javax.servlet.http.HttpServletResponse;
     21 
     22 import org.apache.poi.hssf.usermodel.HSSFCell;
     23 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
     24 import org.apache.poi.hssf.usermodel.HSSFFont;
     25 import org.apache.poi.hssf.usermodel.HSSFRichTextString;
     26 import org.apache.poi.hssf.usermodel.HSSFRow;
     27 import org.apache.poi.hssf.usermodel.HSSFSheet;
     28 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
     29 
     30 
     31 public class ExportExcel<T> {
     32     public void exportExcel(String title,Collection<T> dataset, OutputStream out) {
     33         exportExcel(title, null, dataset, out, "yyyy-MM-dd");
     34     }
     35 
     36     public void exportExcel(String title,String[] headers, Collection<T> dataset,
     37             OutputStream out) {
     38         exportExcel(title, headers, dataset, out, "yyyy-MM-dd");
     39     }
     40     
     41     @SuppressWarnings("unchecked")
     42     public void exportExcel(String title, String[] headers,Collection<T> dataset, OutputStream out, String pattern) {
     43         // 声明一个工作薄
     44         HSSFWorkbook workbook = new HSSFWorkbook();
     45         // 生成一个表格
     46         HSSFSheet sheet = workbook.createSheet(title);
     47         // 设置表格默认列宽度为15个字节
     48         sheet.setDefaultColumnWidth((short) 15);
     49         // 生成一个样式
     50         HSSFCellStyle style = workbook.createCellStyle();
     51         // 生成一个字体
     52         HSSFFont font = workbook.createFont();
     53         font.setFontHeightInPoints((short) 12);
     54         // 把字体应用到当前的样式
     55         style.setFont(font);
     56         // 产生表格标题行
     57         HSSFRow row = sheet.createRow(0);
     58         for (short i = 0; i < headers.length; i++) {
     59             HSSFCell cell = row.createCell(i);
     60             cell.setCellStyle(style);
     61             HSSFRichTextString text = new HSSFRichTextString(headers[i]);
     62             cell.setCellValue(text);
     63         }
     64         // 遍历集合数据,产生数据行
     65         Iterator<T> it = dataset.iterator();
     66         int index = 0;
     67         while (it.hasNext()) {
     68             index++;
     69             row = sheet.createRow(index);
     70             T t = (T) it.next();
     71             // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
     72             Field[] fields = t.getClass().getDeclaredFields();
     73             for (short i = 0; i < fields.length; i++) {
     74                 HSSFCell cell = row.createCell(i);
     75                 cell.setCellStyle(style);
     76                 Field field = fields[i];
     77                 String fieldName = field.getName();
     78                 String getMethodName = "get"
     79                         + fieldName.substring(0, 1).toUpperCase()
     80                         + fieldName.substring(1);
     81                 try {
     82                     Class tCls = t.getClass();
     83                     Method getMethod = tCls.getMethod(getMethodName,
     84                             new Class[] {});
     85                     Object value = getMethod.invoke(t, new Object[] {});
     86                     // 判断值的类型后进行强制类型转换
     87                     String textValue = null;
     88                      if (value instanceof Integer) {
     89                          int intValue = (Integer) value;
     90                          cell.setCellValue(intValue);
     91                      }
     92                      else if (value instanceof Long) {
     93                          long longValue = (Long) value;
     94                          cell.setCellValue(longValue);
     95                      }
     96                      else if (value instanceof Boolean) {
     97                         boolean bValue = (Boolean) value;
     98                         textValue = "1";
     99                         if (!bValue) {
    100                             textValue = "0";
    101                         }
    102                     } else if (value instanceof Date) {
    103                         Date date = (Date) value;
    104                         SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    105                         textValue = sdf.format(date);
    106                     } else {
    107                         // 其它数据类型都当作字符串简单处理
    108                         if(value == null)
    109                         {
    110                             textValue = "";
    111                         }
    112                         else {
    113                             textValue = value.toString();
    114                         }
    115                             
    116                     }
    117                     
    118                     if (textValue != null) {
    119                         Pattern p = Pattern.compile("^//d+(//.//d+)?$");
    120                         Matcher matcher = p.matcher(textValue);
    121                         if (matcher.matches()) {
    122                             // 是数字当作double处理
    123                             cell.setCellValue(Double.parseDouble(textValue));
    124                         } else {
    125                             HSSFRichTextString richString = new HSSFRichTextString(
    126                                     textValue);
    127                             richString.applyFont(font);
    128                             cell.setCellValue(richString);
    129                         }
    130                     }
    131                 } catch (SecurityException e) {
    132                     e.printStackTrace();
    133                 } catch (NoSuchMethodException e) {
    134                     e.printStackTrace();
    135                 } catch (IllegalArgumentException e) {
    136                     e.printStackTrace();
    137                 } catch (IllegalAccessException e) {
    138                     e.printStackTrace();
    139                 } catch (InvocationTargetException e) {
    140                     e.printStackTrace();
    141                 } finally {
    142                     // 清理资源
    143                 }
    144             }
    145 
    146         }
    147         try {
    148             workbook.write(out);
    149         } catch (IOException e) {
    150             e.printStackTrace();
    151         }
    152     }
    153     
    154     public void downloadExcel(String path, HttpServletResponse response) {
    155         try {
    156             // path是指欲下载的文件的路径。
    157             File file = new File(path);
    158             String name = file.getName();
    159             // 取得文件名。
    160             String filename = java.net.URLEncoder.encode(name,"utf-8");
    161             // 清空response
    162             response.reset();
    163             // 设置response的Header
    164             response.addHeader("Content-Disposition", "attachment;filename="
    165                     + new String(filename.getBytes()));
    166             response.addHeader("Content-Length", "" + file.length());
    167             OutputStream toClient = new BufferedOutputStream(
    168                     response.getOutputStream());
    169             response.setContentType("application/ms-excel;charset=gb2312");
    170             // 以流的形式下载文件。
    171             InputStream fis = new BufferedInputStream(new FileInputStream(path));
    172             byte[] buffer = new byte[fis.available()];
    173             fis.read(buffer);
    174             fis.close();
    175             toClient.write(buffer);
    176             toClient.flush();
    177             toClient.close();
    178         } catch (IOException ex) {
    179             ex.printStackTrace();
    180         }
    181     }
    182 }
  • 相关阅读:
    Get-CrmSetting返回Unable to connect to the remote server的解决办法
    Dynamics 365中的常用Associate和Disassociate消息汇总
    Dynamics 365 Customer Engagement V9 活动源功能报错的解决方法
    Dynamics Customer Engagement V9版本配置面向Internet的部署时候下一步按钮不可点击的解决办法
    Dynamics 365检查工作流、SDK插件步骤是否选中运行成功后自动删除系统作业记录
    注意,更改团队所属业务部门用Update消息无效!
    Dynamics 365的审核日志分区删除超时报错怎么办?
    Dynamics 365使用Execute Multiple Request删除系统作业实体记录
    Dynamics 365的系统作业实体记录增长太快怎么回事?
    Dynamics CRM日期字段查询使用时分秒的方法
  • 原文地址:https://www.cnblogs.com/dawnheaven/p/4462572.html
Copyright © 2011-2022 走看看