15ava语法回顾之字符缓冲流Buffered

Java语法回顾之字符缓冲流Buffered


读了那么多年的书让我明白一个道理。人要稳重,不要想到啥就做啥。做一行越久即使你不会,几年之后慢慢的你也会了,加上一点努力你或许你能成为别人眼中的专家。

Buffered缓冲流简介

/*
 * 我们开始自己定义数组,给出缓冲区大小,是为了提高效率。
 * 那么,java在设计类的时候,它也考虑到了这一点,所以,就提供了一种高效的流。带缓冲区的流。
 * BufferedWriter:写入数据
 * BufferedReader:读取数据
 * 
 * BufferedWriter:
 *      构造方法:BufferedWriter(Writer out) 
 * 为什么传递的是Writer呢?
 *      因为BufferedWriter这种流,被称为缓冲流,它只提供数据的缓冲功能。
 *      真正的读写还得靠别人。所以,我们这里将使用FileWriter作为参数传递。
 *      
 *      缓冲区只提供缓冲功能,没有真正的读写。
 * 
 * 基本流:能直接进行读写的流对象。
 * 高级流:站在基本流的基础上,提供一些特殊的功能。(处理流。)
 */

BufferedReader简单使用

/*
 * 字符缓冲流读取数据
 */
public class BufferedReaderDemo {
    public static void main(String[] args) throws IOException {
        // 创建字符缓冲流对象
        BufferedReader br = new BufferedReader(new FileReader("CopyMP3.java"));

        // 读取数据
        // int ch = 0;
        // while ((ch = br.read()) != -1) {
        // System.out.print((char) ch);
        // }

        char[] chs = new char[1024];
        int len = 0;
        while ((len = br.read(chs)) != -1) {
            System.out.print(new String(chs, 0, len));
        }

        // 释放资源
        br.close();
    }
}

BufferedWriter简单使用

public class BufferedWriterDemo {
    public static void main(String[] args) throws IOException {
        //读取数据流
        BufferedReader br = new BufferedReader(new FileReader("CopyMP3.java"));
        //写入数据流
        BufferedWriter bw = new BufferedWriter(new FileWriter("myMP3.java"));
        //读数据操作
        char[] chs = new char[1024];
        int len = 0;
        if (br!=null) {
            while((len = br.read(chs))!=-1){
                //写入数据
                bw.write(chs,0,len);
            }
        }
        bw.close();
        br.close();
    }
}

BufferedReader按行读取数据

/*
 * BufferedWriter:
 *      public void newLine():根据系统平台写入行分隔符
 *      
 * BufferedReader:
 *      public String readLine():一次读取一行的数据。但是不包含换行符。
 */
public class BufferedStreamDemo {
    public static void main(String[] args) throws IOException {

        // 读取数据
        BufferedReader br = new BufferedReader(new FileReader("CopyMP3.java"));

        String line = null;
        while((line=br.readLine())!=null){
            System.out.println(line);
        }
//      System.out.println(br.readLine());
        br.close();
    }
}

用高效字节流复制文件

/*
 * 用字符高效流复制文本文件。
 * 左边:一次一个字符
 * 右边:一次一个字符数组
 * 
 * 数据源:
 *      FileOutputStreamDemo.java
 * 目的地:
 *      Copy.java
 * 
 * 作业:
 * 1:把复制文本文件的操作抽取出一个功能。该功能实现文本文件的复制。
 * 2:自学字节高效流,复制图片。
 *      BufferedInputStream
 *      BufferedOutputStream
 */

用高效字节流复制文件代码测试

public class CopyFile {
    public static void main(String[] args) throws IOException {
        //数据源
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("//Users//xwf//Desktop//123.png")));
        //目的地
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("321.jpg")));

        byte[] chs = new byte[1024];
        int len = 0;
        while((len = bis.read(chs))!=-1){
            bos.write(chs, 0, len);
        }
        bos.close();
        bis.close();
    }
}

高效流和集合的结合使用


public class test {

    /*
     * 数据源:
     *      ArrayList
     * 目的地:
     *      文本文件
     */
    public static void main(String[] args) throws IOException {
        //封装数据源
        ArrayList<String> list = new ArrayList<>();
        list.add("hello");
        list.add("java");
        list.add("hello");
        list.add("Android");
        //封装目的地
        BufferedWriter bw = new BufferedWriter(new FileWriter("array.txt"));
        for (String string : list) {
            bw.write(string);
            bw.newLine();
        }
        bw.close();
    }

}

————————————————————————————————————————————————
public class test {

    /*
     * 数据源:
     *      文本文件
     * 目的地:
     *      ArrayList
     */
    public static void main(String[] args) throws IOException {
        //封装数据源
        BufferedReader br = new BufferedReader(new FileReader("array.txt"));
        //封装目的地
        ArrayList<String> list = new ArrayList<>();
        //readLine 判断条件
        String Line = null;
        while((Line = br.readLine())!=null){
            //向集合中添加数据
            list.add(Line);
        }
        for (String string : list) {
            System.out.println(string);
        }
    }

}

键盘录入数据到文本文件中

public class jianpan {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        // 数据源
        Scanner scanner = new Scanner(System.in);
        //目的地
        BufferedWriter bw = new BufferedWriter(new FileWriter("jianpan.txt"));
        System.out.println("请输入文本内容");
        while (true) {
            String nextLine = scanner.nextLine();
            //键盘录入,终止判断
            if ("exit".equals(nextLine)) {
                break;
            }
            //读取数据
            bw.write(nextLine);
            bw.newLine();
            bw.flush();
        }

        bw.close();
        scanner.close();
    }

}

对文件进行重命名


/*
 * 如果对文件进行改名
 */
public class ChangeNameDemo {
    public static void main(String[] args) {
        File file = new File("a.txt");

        // public boolean renameTo(File dest):重新命名
        File dest = new File("aa.txt");
        //需要2个文件对象
        System.out.println(file.renameTo(dest));
    }

}

复制文件,并改变文件名称

/**
     * 复制love目录下.jpg的图片到桌面copylove下,并改后缀名为.png
     * 
     *  思路:
     *      1.封装数据源和目的地
     *      2.遍历数据源目录,并判断是否有.jpg文件
     *      3.获取文件名称,变改变原文件名称。
     *      4.复制文件(读写文件,并使用新的文件名称)
     */

复制文件,并改变文件名称代码测试


public static void main(String[] args) throws IOException {
        //封装数据源
        File srcFile = new File("//Users//xwf//Pictures//love");
        //封装目的地
        File destFile = new File("//Users//xwf//Desktop//CopyLove");

        //遍历源目录
        File[] listFiles = srcFile.listFiles(new FilenameFilter() {

            @Override
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                return new File(dir, name).isFile() && name.endsWith(".jpg");
            }
        });

        //判断目录是否存在,不存在就创建
        if (!destFile.exists()) {
            destFile.mkdirs();
            System.out.println("目录创建成功"+destFile.getAbsolutePath());
        }
        for (File file : listFiles) {
            //获取文件名称
            String name = file.getName();
            String newNameString = name.replace(".jpg", ".png");
            System.out.println(newNameString);
            FileInputStream fis = new FileInputStream(file);
            //复制文件
            FileOutputStream fos = new FileOutputStream(new File(destFile,newNameString));
            byte[] bys = new byte[1024];
            int len = 0;
            while ((len=fis.read(bys))!=-1) {
                fos.write(bys,0,len);
            }
            //关闭流
            fos.close();
            fis.close();
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值