美文网首页
byte数组与File文件的转换

byte数组与File文件的转换

作者: 小宋_ed76 | 来源:发表于2019-04-08 10:36 被阅读0次

    业务场景:
    在异步线程中,主线程提交了一个文件,子线程接收文件后出现文件大小变为“0”的情况。
    原因:文件从主线程到子线程连接断开,导致文件上传数据丢失
    处理方式:在主线程中将文件转为byte数组,在子线程接收该数组后再将数组转为文件。
    File与byte数组的相互转换

    public class FileUtil {
        /**
         * file转byte
         */
        public static byte[] file2byte(File file){
            byte[] buffer = null;
            try{
                FileInputStream fis = new FileInputStream(file);
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                byte[] b = new byte[1024];
                int n;
                while ((n = fis.read(b)) != -1)
                {
                    bos.write(b, 0, n);
                }
                fis.close();
                bos.close();
                buffer = bos.toByteArray();
            }catch (FileNotFoundException e){
                e.printStackTrace();
            }
            catch (IOException e){
                e.printStackTrace();
            }
            return buffer;
        }
    
        /**
         * byte 转file
         */
        public static File byte2File(byte[] buf, String filePath, String fileName){
            BufferedOutputStream bos = null;
            FileOutputStream fos = null;
            File file = null;
            try{
                File dir = new File(filePath);
                if (!dir.exists() && dir.isDirectory()){
                    dir.mkdirs();
                }
                file = new File(filePath + File.separator + fileName);
                fos = new FileOutputStream(file);
                bos = new BufferedOutputStream(fos);
                bos.write(buf);
            }catch (Exception e){
                e.printStackTrace();
            }
            finally{
                if (bos != null){
                    try{
                        bos.close();
                    }catch (IOException e){
                        e.printStackTrace();
                    }
                }
                if (fos != null){
                    try{
                        fos.close();
                    }catch (IOException e){
                        e.printStackTrace();
                    }
                }
            }
            return file;
        }
    /**
    * multipartFile转File
    **/
    public static File multipartFile2File(MultipartFile multipartFile){
            File file = null;
            if (multipartFile != null){
                try {
                    file=File.createTempFile("tmp", null);
                    multipartFile.transferTo(file);
                    System.gc();
                    file.deleteOnExit();
                }catch (Exception e){
                    e.printStackTrace();
                    log.warn("multipartFile转File发生异常:"+e);
                }
            }
            return file;
        }
    }
    

    相关文章

      网友评论

          本文标题:byte数组与File文件的转换

          本文链接:https://www.haomeiwen.com/subject/detuiqtx.html