zoukankan      html  css  js  c++  java
  • 好用的文件下载类

        /**
         * 首页下载使用说明
         * @throws Exception 
         */
        @RequestMapping(value="downfileDownload")
        public void downfileDownload(HttpServletResponse response) throws Exception{
            String filePath = String.valueOf(Thread.currentThread().getContextClassLoader().getResource("").getPath()+"../../")+"instruction.docx";
            FileDownload.fileDownload(response, filePath, "北京市高层建筑消防安全综合治理数据平台使用手册(支队、监督员、用户版).docx");
        }

    package com.fh.util;
    
    import java.io.BufferedOutputStream;
    import java.io.OutputStream;
    import java.net.URLEncoder;
    
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 下载文件
     * 创建时间:2014年12月23日
     * @version
     */
    public class FileDownload {
    
        /**
         * @param response 
         * @param filePath        //文件完整路径(包括文件名和扩展名)
         * @param fileName        //下载后看到的文件名
         * @return  文件名
         */
        public static void fileDownload(final HttpServletResponse response, String filePath, String fileName) throws Exception{  
               
            byte[] data = FileUtil.toByteArray2(filePath);  
            fileName = URLEncoder.encode(fileName, "UTF-8");  
            response.reset();  
            response.setHeader("Content-Disposition", "attachment; filename="" + fileName + """);  
            response.addHeader("Content-Length", "" + data.length);  
            response.setContentType("application/octet-stream;charset=UTF-8");  
            OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());  
            outputStream.write(data);  
            outputStream.flush();  
            outputStream.close();
            response.flushBuffer();
            
        } 
    
    }
    package com.fh.util;
    
    import java.io.BufferedInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.ByteBuffer;
    import java.nio.MappedByteBuffer;
    import java.nio.channels.FileChannel;
    import java.nio.channels.FileChannel.MapMode;
    
    /**    文件处理
    *  创建人:FH Q313596790
     * 创建时间:2014年12月23日
     */
    public class FileUtil {
    
        
        /**获取文件大小 返回 KB 保留3位小数  没有文件时返回0
         * @param filepath 文件完整路径,包括文件名
         * @return
         */
        public static Double getFilesize(String filepath){
            File backupath = new File(filepath);
            return Double.valueOf(backupath.length())/1000.000;
        }
        
        /**
         * 创建目录
         * @param destDirName目标目录名
         * @return 
         */
        public static Boolean createDir(String destDirName) {
            File dir = new File(destDirName);
            if(!dir.getParentFile().exists()){                //判断有没有父路径,就是判断文件整个路径是否存在
                return dir.getParentFile().mkdirs();        //不存在就全部创建
            }
            return false;
        }
    
        /**
         * 删除文件
         * @param filePathAndName
         *            String 文件路径及名称 如c:/fqf.txt
         * @param fileContent
         *            String
         * @return boolean
         */
        public static void delFile(String filePathAndName) {
            try {
                String filePath = filePathAndName;
                filePath = filePath.toString();
                java.io.File myDelFile = new java.io.File(filePath);
                myDelFile.delete();
            } catch (Exception e) {
                System.out.println("删除文件操作出错");
                e.printStackTrace();
            }
        }
    
        /**
         * 读取到字节数组0
         * @param filePath //路径
         * @throws IOException
         */
        public static byte[] getContent(String filePath) throws IOException {
            File file = new File(filePath);
            long fileSize = file.length();
            if (fileSize > Integer.MAX_VALUE) {
                System.out.println("file too big...");
                return null;
            }
            FileInputStream fi = new FileInputStream(file);
            byte[] buffer = new byte[(int) fileSize];
            int offset = 0;
            int numRead = 0;
            while (offset < buffer.length
                    && (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) {
                offset += numRead;
            }
            // 确保所有数据均被读取
            if (offset != buffer.length) {
                throw new IOException("Could not completely read file " + file.getName());
            }
            fi.close();
            return buffer;
        }
    
        /**
         * 读取到字节数组1
         * 
         * @param filePath
         * @return
         * @throws IOException
         */
        public static byte[] toByteArray(String filePath) throws IOException {
    
            File f = new File(filePath);
            if (!f.exists()) {
                throw new FileNotFoundException(filePath);
            }
            ByteArrayOutputStream bos = new ByteArrayOutputStream((int) f.length());
            BufferedInputStream in = null;
            try {
                in = new BufferedInputStream(new FileInputStream(f));
                int buf_size = 1024;
                byte[] buffer = new byte[buf_size];
                int len = 0;
                while (-1 != (len = in.read(buffer, 0, buf_size))) {
                    bos.write(buffer, 0, len);
                }
                return bos.toByteArray();
            } catch (IOException e) {
                e.printStackTrace();
                throw e;
            } finally {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                bos.close();
            }
        }
    
        /**
         * 读取到字节数组2
         * 
         * @param filePath
         * @return
         * @throws IOException
         */
        public static byte[] toByteArray2(String filePath) throws IOException {
            File f = new File(filePath);
            if (!f.exists()) {
                throw new FileNotFoundException(filePath);
            }
            FileChannel channel = null;
            FileInputStream fs = null;
            try {
                fs = new FileInputStream(f);
                channel = fs.getChannel();
                ByteBuffer byteBuffer = ByteBuffer.allocate((int) channel.size());
                while ((channel.read(byteBuffer)) > 0) {
                    // do nothing
                    // System.out.println("reading");
                }
                return byteBuffer.array();
            } catch (IOException e) {
                e.printStackTrace();
                throw e;
            } finally {
                try {
                    channel.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    fs.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * Mapped File way MappedByteBuffer 可以在处理大文件时,提升性能
         * 
         * @param filename
         * @return
         * @throws IOException
         */
        public static byte[] toByteArray3(String filePath) throws IOException {
    
            FileChannel fc = null;
            RandomAccessFile rf = null;
            try {
                rf = new RandomAccessFile(filePath, "r");
                fc = rf.getChannel();
                MappedByteBuffer byteBuffer = fc.map(MapMode.READ_ONLY, 0,
                        fc.size()).load();
                //System.out.println(byteBuffer.isLoaded());
                byte[] result = new byte[(int) fc.size()];
                if (byteBuffer.remaining() > 0) {
                    // System.out.println("remain");
                    byteBuffer.get(result, 0, byteBuffer.remaining());
                }
                return result;
            } catch (IOException e) {
                e.printStackTrace();
                throw e;
            } finally {
                try {
                    rf.close();
                    fc.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }
  • 相关阅读:
    IOS小组件(8):App与Widget数据共享
    IOS小组件(7):小组件点击交互
    IOS小组件(6):小组件实现时钟按秒刷新
    IOS小组件(5):小组件刷新机制
    IOS小组件(4-2):创建可配置小组件(动态修改配置数据)
    IOS小组件(4-1):创建可配置小组件(静态配置数据)
    IOS小组件(3):SwiftUI开发小组件布局入门
    IOS小组件(2):小组件框架解析
    IOS小组件(1):概述
    python函数作用域
  • 原文地址:https://www.cnblogs.com/zrui-xyu/p/7457934.html
Copyright © 2011-2022 走看看