Java学习笔记------twenty(InputStreamReader, OutputStreamWriter)

1.OutputStreamWriter的使用
A:OutputStreamWriter的构造方法
OutputStreamWriter(OutputStream out):根据默认编码(GBK)把字节流的数据转换为字符流
OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流数据转换为字符流
B: 方法概述
public void write(int c) 写一个字符
public void write(char[] cbuf) 写一个字符数组
public void write(char[] cbuf,int off,int len) 写一个字符数组的 一部分
public void write(String str) 写一个字符串
public void write(String str,int off,int len) 写一个字符串的一部分
2.InputStreamReader的使用
A:InputStreamReader的构造方法
InputStreamReader(InputStream is):用默认的编码(GBK)读取数据
InputStreamReader(InputStream is,String charsetName):用指定的编码读取数据
B: 方法概述
public int read() 一次读取一个字符
public int read(char[] cbuf) 一次读取一个字符数组 如果没有读到 返回-1

案例演示:复制一个文件

 InputStreamReader input = new InputStreamReader(new FileInputStream("D:\\Java4.docx"));
 OutputStreamWriter output = new OutputStreamWriter(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Java4.docx"));
        int len=0;
        char[] chars = new char[1024];
        while ((len=input.read(chars))!=-1){
            output.write(chars,0,len);
            output.flush();
        }
        input.close();
        output.close();
3.FileWriter和FileReader
转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,
所以,为了简化我们的书写,转换流提供了对应的子类。	
FileWriter
FileReader
转换流										便捷类
OutputStreamWriter	-------		FileWriter
InputStreamReader	-------		FileReader
案例演示:需求:把ArrayList集合中的字符串数据存储到文本文件
 OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("b.txt"));
            ArrayList<String> list = new ArrayList<>();
            list.add("张飞");
            list.add("赵云");
            list.add("关羽");
            list.add("马超");
            list.add("黄忠");
            //遍历集合,取出数据,写入文本文件
            for (String s : list) {
            //    System.out.println(s);
               out.write(s);
               out.write("\r\n");
               out.flush();

案例演示:复制一个文件夹,并将文件夹中JPG格式的文件改成png格式

 File srcFolder = new File("D:\\demo");
    //封装目标文件夹
    File targetFolder = new File("c:\\demo");
        if (!targetFolder.exists()) {
                targetFolder.mkdirs();
                }

                copyFiles(srcFolder, targetFolder);
                }

private static void copyFiles(File srcFolder, File targetFolder) throws IOException {
        //进行文件的复制
        //1.获取源文件下的所有文件
        File[] files = srcFolder.listFiles();
    for (File f : files) {
        //一个个复制
        copySingleFile(f, targetFolder);
    }
    }

private static void copySingleFile(File f, File targetFolder) throws IOException {

        FileInputStream in = new FileInputStream(f);//D:\\test\\a.avi
        FileOutputStream out = new FileOutputStream(targetFolder + "\\" + f.getName());
        int len2 = 0;
        byte[] bytes = new byte[1024 * 10];
        while ((len2 = in.read(bytes)) != -1) {
        out.write(bytes, 0, len2);
        }
        File file = new File("c:\\demo");
        File[] files1 = file.listFiles();
        for (File file1 : files1) {
             if (file1.getName().endsWith(".jpg")) {
                 String abs = file1.getAbsolutePath();
                 String sub = abs.substring(0, abs.lastIndexOf("."));
                 File newfile = new File(sub + ".png");
                 file1.renameTo(newfile);
            }
        }

        in.close();
        out.close();

案例演示:复制多级文件夹

 File srcFolder = new File("D:\\MyLogin");
        //封装目标文件夹
        File targetFolder = new File("C:\\MyLogin");
        if (!targetFolder.exists()) {
            targetFolder.mkdirs();
        }

       copyFiles1(srcFolder, targetFolder);
    }

    private static void copyFiles1(File srcFolder, File targetFolder) throws IOException {
        //进行文件的复制
        //1.获取源文件下的所有文件
        File[] files = srcFolder.listFiles();
        for (File f : files) {
            if (f.isFile()) {
                //一个个复制
                copySingleFile(f, targetFolder);
            } else {
                copyDir(f,targetFolder);
            }
        }
    }

    private static void copyDir(File f,File targetFolder) throws IOException {
        File file = new File(targetFolder+"\\"+f.getName());
        file.mkdirs();
        copyFiles1(f,file);

    }

    private static void copySingleFile(File f, File targetFolder) throws IOException {

        FileInputStream in = new FileInputStream(f);//D:\\test\\a.avi     
        FileOutputStream out = new FileOutputStream(targetFolder + "\\" + f.getName());
        int len2 = 0;
        byte[] bytes = new byte[1024 * 10];
        while ((len2 = in.read(bytes)) != -1) {
            out.write(bytes, 0, len2);
        }
        in.close();
        out.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值