java 文件IO字节流读写笔记

业务背景:由于文书数据直接保存在数据库中,随着业务量的增加,文书数量也随之剧增,导致系统访问速度变慢。所以决定数据库中只保存文书地址信息(我采用保存ID的形式),文书数据保存到本地磁盘中。

  • 一、把文件以字节流的方式保存到本地目录文件夹下(为了增加印象,没有copy,手打的代码,异常处理什么的就没写了:-D)
            private  void save(DefaultMultipartHttpServletRequest mreq){
                     //从前台获取文书文件体的方法,是为了获得文件体字节流,
                     //其他方式的文件形式只要获得到字节流即可。
                    MultipartFile f = mreq.getFile("FileBlody"); 
                     //保存到库中的id,通过这个id再到文件夹中取对应流文件。
                    String docId = UUID.generateUUID();   
                     //定义的.txt文件形式。
                    String docName = documentID+".txt";   
                     //定义保存的文件夹地址(也可以定义到部署文件下)。
                    String dir = "D:\\docFile\\";         

                     //获取文件夹信息。
                    File file = new File(dir);    
                    //判断文件夹是否存在。        
                    if(!file.exists()){         
                        //如果文件夹不存在就创建文件夹。          
                        file.mkdirs();                    
                    }
                     //创建文件输出流。
                    FileOutputStream os = new FileOutputStream(dir+docName); 
                     //获得文件体字节流。  
                    byte[]  fileByte = f.getBytes();     
                     //获得文件体字节流长度。
                    int fileLen = f.getBytes().length; 
                     //写入文件。  
                    os.write(fileByte,0,filelen);   
                     //记得关门。     
                    os.close();                        
            }
  • 二、读取文件获取字节流信息
            private  void getFile(){
                      //反正最后拼凑成这样子的地址。(后来我觉得用classPath作为保存路径的话,
                      //移植性会更好,保不齐来一台没有D盘的服务器。
                      //再后来又感觉可以把地址写到配置文件中更易维护,
                      //所以感觉差不多。不过还是想请教一下大家有没有好的建议:-D)。
                    File docFile =new File("D:/docFile/38324w2k32j4322432324234233k43.txt");  
                     //为了防止读到脏文件。
                    if(docFile.isFile()){   
                         //定义文件输入流。
                        FileInputStream fis  = null;  
                         //定义文件输入流。
                        BufferedInputStream bis = null; 
                         //定义了一个内部缓冲区数组。捕获内存缓冲区的数据,转换成字节数组
                        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
                         //定义一个字节型数组作为容器(我最后要的是一个字节型数组)
                        byte[] content = null;  

                        try{
                             //创建文件输入流对象
                            fis = new FileInputStream(docFile); 
                             //创建内部缓存区数组
                            bis = new BufferedInputStream(fis); 
                             //定义一个长度载体
                            int len = 0;   
                             //创建一个有长度的数据载体
                            byte[] buffer = new byte[1024];  
                             //如有数据就写进去
                            while((len = bis.read(buffer))!=-1){ 
                                baos.write(buffer,0,len);
                            }
                             //获得文件中的字节流信息(如要其他类型数据再做转换)
                            content = baos.toByteArray(); 
                        }catch(IOException e){
                            e.printStackTrace();
                        }finally{
                            try{
                                baos.close();   //关门
                                bis.close();    //关窗
                                fis.close();    //关裤门
                            }catch (IOException e){
                                e.printStackTrace();
                            }
                        }
                    }   
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值