使用JAVAIO读写文件

 @Test
    public void test4(){
        File file = new File("C:\\Users\\Administrator\\Desktop\\SUPPLIERFile.txt");
        File newFile = new File("C:\\Users\\Administrator\\Desktop\\SUPPLIERnewFile.txt");
        try {
            if(!newFile.exists()){
                newFile.createNewFile();
            }
            BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
            String contentLine = null;

            FileOutputStream fileOutputStream = new FileOutputStream(newFile,true);//true代表追加写入内容
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
            BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
            StringBuffer sb = new StringBuffer();
            while ((contentLine = bufferedReader.readLine()) != null){
                sb.append(contentLine);
            }
            bufferedReader.close();

            for (int i = 0;i < 200;i ++){
                bufferedWriter.write(sb.toString()+",\r\n");
                //记得flush不然文件不完整
            	bufferedWriter.flush();
            }

            fileOutputStream.flush();
            fileOutputStream.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

一次读取一整个文件,要保证内存够用


```java
@Test
    public void test4(){
        File file = new File("C:\\Users\\Administrator\\Desktop\\SUPPLIERFile.txt");
        File newFile = new File("C:\\Users\\Administrator\\Desktop\\SUPPLIERnewFile.txt");
        try {
            if(!newFile.exists()){
                newFile.createNewFile();
            }else {
                newFile.delete();
                newFile.createNewFile();
            }
            String contentLine = null;
            InputStream fileInputStream = new FileInputStream(file);
            byte[] bytes = new byte[fileInputStream.available()];
            fileInputStream.read(bytes);


            FileOutputStream fileOutputStream = new FileOutputStream(newFile,true);
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
            BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
            StringBuffer sb = new StringBuffer();
           
            contentLine = new String(bytes) + ",\r\n";
            for (int i = 0;i < 200;i ++){
                bufferedWriter.write(contentLine);
                //记得flush不然文件不完整
            	bufferedWriter.flush();
            }
            bufferedWriter.flush();
            bufferedWriter.close();
            fileOutputStream.flush();
            fileOutputStream.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

使用RandomAccessFile读写文件,这里我只用了下读取文件,因为在处理过程中如果找到了目标文件的数据,还要在从头查询。所以要用一下RandomAccessFile.seek(0)回到文件头。

```java
public void saveBodyConfirm(){
        File file = new File("D:\\work\\tingtongMongoDump\\2\\interface_confirm_log_id.json");
        File newFile = new File("D:\\work\\tingtongMongoDump\\2\\interface_confirm_log_body.json");


        BufferedInputStream fis = null;
        try {
            fis = new BufferedInputStream(new FileInputStream(file));
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis,"utf-8"),10*1024*1024);
            String contentLine = null;


            RandomAccessFile raf = new RandomAccessFile("D:\\work\\tingtongMongoDump\\2020_interface_log_body.json", "rw");

            raf.seek(0);

            FileOutputStream fileOutputStream = new FileOutputStream(newFile,false);//true代表追加写入内容
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
            BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
            StringBuffer sb = new StringBuffer();


            while ((contentLine = bufferedReader.readLine()) != null){
                String tempStr = contentLine.substring(contentLine.indexOf("_bodyDocId")+13,contentLine.indexOf("expireAt") - 3);
                String tempStrBody = null;
                while ((tempStrBody = raf.readLine()) != null){
                    tempStrBody = tempStrBody.substring(tempStrBody.indexOf("oid")+6,tempStrBody.indexOf("originalBody") - 4);
                    if(tempStr.equals(tempStrBody)){
                        sb.append(tempStrBody).append("\r\n");
                        //重新指向文件开始位置
                        raf.seek(0);
                        break;
                    }
                }
            }

            bufferedWriter.write(sb.toString());
            //记得flush不然文件不完整
            bufferedWriter.flush();
            raf.close();
            bufferedReader.close();



        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值