IO流回顾

目录

BufferedReader与BufferWriter:

介绍:

例子:一个数组一个数组的读取:

乱码问题:

复制文件(类似于文件下载)

SpringMvc封装的transferto()方法:


BufferedReader与BufferWriter:

介绍:

有利于提高字符流的读写效率,引入了缓冲机制;

BufferedReader与BufferedWriter各拥有8192个字符缓冲区:—>当BufferedReader读取外部资源时,会将资源先放满缓冲区,之后若调用read(),也是先从缓冲区开始读取的;

而BufferedWriter,当我们使用它引入资源或是说写入文件时,写入的数据也并不会先输送到目的地,而是现在缓冲区中;

例子:一个数组一个数组的读取:

package Demo;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * @author diao 2022/2/14
 */
public class demo7 {
    public static void main(String[] args) throws IOException {
        String filePath = null;
        BufferedReader reader = new BufferedReader(new FileReader(filePath));
//        进行判断
        if(!reader.ready()){
            System.out.println("文件暂时无法读取");
            return;
        }
        int size=0;
        char[] chars = new char[20];
        //调用Reader的read方法进行读取(数组,偏移,长度)
        while((size=reader.read(chars,0,chars.length))!=-1){
            //一个数组一个数组的读取资源
            System.out.println(new String(chars,0,size));
        }
        reader.close();
    }
}

一行一行的读取:

package Demo;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * @author diao 2022/2/14
 */
public class demo7 {
    public static void main(String[] args) throws IOException {
        String filePath=null;
        BufferedReader reader = new BufferedReader(new FileReader(filePath));
        
        if(!reader.ready()){
            System.out.println("文件流暂时无法读取");
            return;
        }
        int size=0;
        String line;
        //一行一行读取
        while((line=reader.readLine())!=null){
            System.out.println(line+"\n");
        }
        reader.close();
    }
}

读取换行时,需要自己加入换行符号;

BufferedReader比FileReader高级之处:BufferedReader除了一个一个字符读取和一个数组一个数组的读取之外,还能一行一行读取,并且还带缓冲速度较快;

乱码问题:

处理:使用包装了InputStreamReaderBufferedReader来读取文件;

package Demo;

import java.io.*;

/**
 * @author diao 2022/2/14
 */
public class demo8 {
    public static void main(String[] args) throws IOException {
        String file=null;
        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));
        char[] chars = new char[20];
        String line;//行
        int size;
        while((size=reader.read(chars,0,chars.length))!=-1){
            System.out.println(new String(chars,0,chars.length));
        }
    }
}

复制文件(类似于文件下载)

两步: 首先要读取外部资源(可以理解为外部硬盘上),然后将外部资源此时已经到内存上,最后将资源再传输到本地的硬盘上就保存啦;

 一些demo:

逐个读取,边读边写—>复制文件

static void copyByChar(String srcFile, String destFile) throws IOException
{
    BufferedReader reader = new BufferedReader(new FileReader(srcFile));
    BufferedWriter writer = new BufferedWriter(new FileWriter(destFile));
    int ch=0;
//边读边写
    //读取一个字符
    while ((ch = reader.read()) != -1)
    {
        //写入一个字符
        writer.write(ch);
    }
    reader.close();
    writer.close();
}

数组形式—>读多少写多少

static void copyByCharArray(String srcFile, String destFile) throws IOException
{
    BufferedReader reader = new BufferedReader(new FileReader(srcFile));
    BufferedWriter writer = new BufferedWriter(new FileWriter(destFile));
    int size=0;
    char[] cbuf=new char[20];
    //读取一个字符数组
    while ((size = reader.read(cbuf)) != -1)
    {
        //读入多少写入多少
        writer.write(cbuf,0,size);
    }
    reader.close();
    writer.close();
}

按行复制:

static void copyByLine(String srcFile,String destFile) throws IOException
{
    BufferedReader reader=new BufferedReader(new FileReader(srcFile));
    BufferedWriter writer=new BufferedWriter(new FileWriter(destFile));
    String line;
    //BufferedReader读取一行的时候返回的字符串中不包括换行符
    //如果有一行字符就返回该行字符串,没有就返回null
    while((line=reader.readLine())!=null)
    {
        writer.write(line);
        writer.newLine();//写换行符
    }
    reader.close();
    writer.close();
}

测试:

public static void main(String[] args) throws IOException
{
    String from = "gbk.txt";
    String to = "gbk_copy.txt";
    String to1 = "gbk_copy1.txt";
    String to2 = "gbk_copy2.txt";
    copyByChar(from, to);
    copyByCharArray(from, to1);
    copyByLine(from, to2);
}

换行问题:

加一个第一行判断即可:第一行有资源就写,没有就写行分隔符;

static void copyByLine(String srcFile,String destFile) throws IOException
{
    BufferedReader reader=new BufferedReader(new FileReader(srcFile));
    BufferedWriter writer=new BufferedWriter(new FileWriter(destFile));
    String line;
    //BufferedReader读取一行的时候返回的字符串中不包括换行符
    //如果有一行字符就返回该行字符串,没有就返回null
    boolean flag=false;
    while((line=reader.readLine())!=null)
    {
        if(!flag)
        {
            flag=true;
            writer.write(line);
        }
        else
        {
            writer.newLine();//写换行符
            writer.write(line);
        }

    }
    reader.close();
    writer.close();
}

SpringMvc封装的transferto()方法:

一次性直接读

//上传图片
				//1图片存储的路径
				String pic_path="";
				//2原名称
				String originalFilename = items_pic.getOriginalFilename();
				//3新名称(uuid随机数加上后缀名)
			    String newfileName=UUID.randomUUID()+originalFilename.substring(originalFilename.lastIndexOf("."));
			     //新的图片
			    File newfile=new File(pic_path+newfileName);
			    //把内存图片写入磁盘中
			    items_pic.transferTo(newfile);
			    //把新的图片写入到对象中,方便数据库中更新
			    itemsCustom.setPic(newfileName);
			// 调用service更新商品信息,页面需要将商品信息传到此方法
			itemsService.updateItems(id, itemsCustom);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fairy要carry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值