• 滴水穿石-08IO


    1.0 File

    a:构造方法

    package d8;
    
    import java.io.File;
    
    public class FileGouZao {
        public static void main(String[] args) {
            //方式一:根据一个路径得到一个一个file对象
            //File(String pathName)
            File fe = new File("D:\aaa\a.txt");
            
            //方式二,通过父路径的名字 + 子文件/目录得到一个File对象
            //File(String parent,String child)
            File fe2 = new File("D:\aaa","a.txt");
            
            //方式三,通过父File对象 + 子文件/目录得到一个File对象
            //File(File parent,String child)
            File fe3 = new File("D:\aaa");
            File fe4 = new File(fe3,"D:\aaa");
        }
    }
    1.0

    b:创建方法

    package d8;
    
    import java.io.File;
    import java.io.IOException;
    
    public class FileGouAdd {
        public static void main(String[] args) throws IOException {
            //方式一:创建文件
            //boolean createNewFile()
            File fe = new File("D:\aaa\a.txt");
            fe.createNewFile();
            //方式二,创建文件夹
            //boolean mkdir()
            File fe2 = new File("D:\aaa","aa");
            fe2.mkdir();
            //方式三, 创建文件夹们,如果父文件夹不存在就创建
            //boolean mkdirs()
            File fe3 = new File("D:\aaa");
            File fe4 = new File(fe3,"aa\a");
            fe4.mkdirs();
            //注意如果没有写盘符,默认为项目路径
            File fe5 = new File("a.txt");
            fe5.createNewFile();
            
            //如果用方式一创建时,如果父目录不存在,会出现"系统找不到指定的路径"的错误
            //如果用方式二创建时,如果父目录不存在,返回false
            //如果用方式三创建时,如果父目录不存在,就创建上级目录
        }
    }
    1.0

    c:删除方法

    package d8;
    
    import java.io.File;
    import java.io.IOException;
    
    public class FileDelete {
        public static void main(String[] args) throws IOException {
            //方式一:创建文件
            //boolean createNewFile()
            File fe = new File("D:\aaa\a.txt");
            fe.createNewFile();
            fe.delete();
             
            
            File fe2 = new File("D:\aaa");
            System.out.println(fe2.delete());
            //--------false---------//
             
            
            //注意:删除不走回收站
            //如果是删除目录,则该目录必须为空才能删除
            
        }
    }
    1.0
    package d8;
    
    import java.io.File;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class Filedelete2 {
        public static void main(String[] args) throws IOException {
            //获取F盘所有的.exe文件
             
            File fe = new File("D:\aaa");
            deleteAllFile(fe);
             /* */
        }
        public static void deleteAllFile(File fe) {
            if( fe.isFile()|| fe==null ) {
                System.out.println(fe.getPath());
                fe.delete();
                
            }else if(fe.isDirectory()&& fe.list().length<1){
                System.out.println(fe.getPath());
                fe.delete();             
            }else {
                File [] files = fe.listFiles();
                if (files!=null) {
                    for (File file : files) {
                        deleteAllFile(file);
                    }
                    deleteAllFile(fe);
                }
                
            }
            
        }
    }
    /*D:aaaa.txt
    D:aaaaaa
    D:aaaaa
    D:aaa.txt
    D:aaad.txt
    D:aaa*/
    2.0级联删除

    d:修改方法

    package d8;
    
    import java.io.File;
    import java.io.IOException;
    
    public class FileRenameTo {
        public static void main(String[] args) throws IOException {
            //方式一:路径相同重命名    
            File fe = new File("D:\aaa\a.txt");
            fe.createNewFile();
            File f2 = new File("D:\aaa\b.txt");
            fe.renameTo(f2);
            
            //方式二:路径不同,相当于剪切功能
            File fe3 = new File("a.txt");//默认路径,也就是项目路径
            fe3.createNewFile();
            File f4 = new File("D:\aaa\d.txt");
            fe3.renameTo(f4);
            
            //方式一:路径相同重命名    
            //方式二:路径不同,相当于剪切功能
            
        }
    }
    1.0

     e:判断功能

    package d8;
    
    import java.io.File;
    import java.io.IOException;
    
    public class FileJudge {
        public static void main(String[] args) throws IOException {
    
            File fe = new File("D:\aaa\a.txt");
    
            boolean existsB = fe.exists();// 判断文件是否是存在
            boolean isFileB = fe.isFile();// 判断文件是否是一个标准文件
            boolean isDirectoryB = fe.isDirectory();// 判断文件是否是一个目录
            boolean isHiddenB = fe.isHidden();// 判断文件是否是隐藏
            boolean canReadB = fe.canRead();// 判断文件是否可读
            boolean canWriteB = fe.canWrite();// 判断文件是否是可写
    
            System.out.println(existsB);        //---true---/
            System.out.println(isFileB);        //---true---/
            System.out.println(isDirectoryB);    //---false---/
            System.out.println(isHiddenB);        //---false---/
            System.out.println(canReadB);        //---true---/
            System.out.println(canWriteB);        //---true---/
            
        }
    }
    1.0

     f:获取功能

    package d8;
    
    import java.io.File;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class FileGet {
        public static void main(String[] args) throws IOException {
    
            File fe = new File("D:\aaa\a.txt");
    
            String strAbsolutePath = fe.getAbsolutePath();// 获取文件绝对路径
            String strPath = fe.getPath();// 获取文件路径
            String strName = fe.getName();// 获取文件名
            Long length = fe.length();// 获取文件大小
            Long strLastModified = fe.lastModified();// 获取文件最后的修改时间
            Date d = new Date(strLastModified);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String s = sdf.format(d);
            System.out.println(strAbsolutePath); // ---D:aaaa.txt----/
            System.out.println(strPath); // ---D:aaaa.txt----/
            System.out.println(strName); // ---a.txt-----/
            System.out.println(length); // ---12-----/
            System.out.println(strLastModified); // ---1517184516189---/
            System.out.println(s); // ---2018-01-29 20:10:41----/
    
        }
    }
    1.0
    package d8;
    
    import java.io.File;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class FileGet2 {
        public static void main(String[] args) throws IOException {
    
            File fe = new File("D:\");
    
             String [] nameArray = fe.list();
             for (String s : nameArray) {
                System.out.println(s);
            }
             
             File [] fileArray = fe.listFiles();
             for (File f : fileArray) {
                System.out.println(f.getName());
            }
             
             /*
    $RECYCLE.BIN
    00002109030000000000000000F01FEC.reg
    aaa
    API文档
    BaiduNetdiskDownload
    Config.Msi
    Develop
    java(1)
    JavaWorkspace
    LuceneNet测试文件
    midnds
    MyDrivers
    pagefile.sys
    Program Files
    Program Files (x86)
    StormMedia
    System Volume Information
    Unity3D5.0
    Users
    博客资料
    迅雷下载
    黑马JavaEE32*/
        }
    }
    2.0
    package d8;
    
    import java.io.File;
    import java.io.FileFilter;
    import java.io.FilenameFilter;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class FileTest {
        public static void main(String[] args) throws IOException {
            //找出D盘下所有以.reg结尾的文件
            File fe = new File("D:\");
            
            //方法一:取出所有文件然后筛选
            File [] files = fe.listFiles();
            for (File f : files) {
                if (f.isFile()&&f.getName().endsWith(".reg")) {
                    System.out.println(f.getName());
                }
            }
            //-----------00002109030000000000000000F01FEC.reg----------//
          
            
            //方法二: 通过过滤器先过滤一下 listFiles(FileFilter filter) 
            File [] files2 = fe.listFiles(new FileFilter() {            
                @Override
                public boolean accept(File pathname) {
                    // TODO Auto-generated method stub
                    return pathname.isFile()&&pathname.getName().endsWith(".reg");
                }
            });
            for (File f : files2) { 
                    System.out.println(f.getName()); 
            }
            //-----------00002109030000000000000000F01FEC.reg----------//
            
            //方法三:方法二可能消耗的资源有点大 list(FilenameFilter filter) 
            String [] files3 =  fe.list(new FilenameFilter() {
                
                @Override
                public boolean accept(File dir, String name) {
                    if (name.endsWith(".reg")) {
                        File fnew = new File(dir, name);
                        return fnew.isFile();
                    }
                    return false;
                }
            });
            for (String f : files3) { 
                    System.out.println(f); 
            }
            //-----------00002109030000000000000000F01FEC.reg----------//
        }
    }
    3.0

     递归获取4.0

     2.0 IO

    2.1 InputStream

      2.1.1 FileInputStream

      a:构造方法  

    package d8;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    
    public class FileInputStreamGouZao {
        public static void main(String[] args) throws FileNotFoundException {
            
            
            // 方式一:根据一个路径得到一个读取数据的写入文件流对象
            // FileOutputStream(String name)
            FileInputStream fos = new FileInputStream("D:\aaa\a.txt");
    
            // 方式二,通过File对象 得到一个读取数据的写入文件流对象
            // FileOutputStream(File file)
            File fe = new File("D:\aaa", "a.txt");
            FileInputStream fos2 = new FileInputStream(fe);
    
             
        }
    }
    1.0

      b:读取方法

    package d8;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class FileInputStreamRead {
        public static void main(String[] args) throws IOException {
     
            // 方式一:
            // read()  从此输入流中读取一个数据字节。
    
            FileInputStream fis = new FileInputStream("D:\aaa\a.txt");
            int b = 0;
            while((b=fis.read())!=-1) {
                System.out.println((char)b);
            } 
            fis.close();
            
    
            // 方式二
            //read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
            FileInputStream fis2 = new FileInputStream("D:\aaa\a.txt");
            byte[] bs = new byte[5];      
            while(( fis2.read(bs))!=-1) {
                System.out.println(new String(bs));
            } 
            fis2.close();
             
    
            // read(byte[] b, int off, int len)
            // 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
            FileInputStream fis3 = new FileInputStream("D:\aaa\a.txt");
            byte[] bs2 = new byte[5];    
            int len = 0;
            while(( len = fis3.read(bs2))!=-1) {
                System.out.println(new String(bs2,0,len));
            } 
            fis3.close();
        }
    }
    /* 方式一
    H
    e
    l
    l
    o
    
    
    
    
    W
    o
    r
    l
    d
     
    
    
    
    
    j
    a
    v
    a    */
    
    /* 方式二
    
    Hello
    
    Wor
    ld 
    
    java 
    
    va 
    */
    /* 方式三
    Hello
    
    Wor
    ld 
    
    java 
    */
    1.0

      2.1.2 BufferedInputStream

     a:构造方法

    package d8;
    
     
    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class BufferedInputStreamGouZao {
        public static void main(String[] args) throws IOException   {
             
            // 方式一:根据一个路径得到一个写入数据的输出文件流对象
            //BufferedInputStream(InputStream out) 
            BufferedInputStream fis = new BufferedInputStream(new FileInputStream("D:\aaa\a.txt"));
    
            // 方式二,通过Buffered对象 得到一个写入数据的输出文件流对象
            // BufferedInputStream(InputStream out, int size) 
            BufferedInputStream fis2 = new BufferedInputStream(new FileInputStream("D:\aaa\a.txt"),1024);
    
        }
    }
    1.0

    b:读取方法

    package d8;
    
    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    public class BufferedInputStreamReade{
        public static void main(String[] args) throws IOException {
    
            // 方式一
            // read(int b) 将指定字节写入此文件输出流。
            BufferedInputStream fis = new BufferedInputStream(new FileInputStream("D:\aaa\a.txt"));
             int b =0;
             while ((b=fis.read())!=-1) {
                 System.out.println(b);
            }
             /*
    97
    32
    119
    111*/
    
            // read(byte[] b, int off, int len)
            // 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
            BufferedInputStream fis2 = new BufferedInputStream(new FileInputStream("D:\aaa\a.txt"), 1024);
             byte [] by = new byte[5];
             int len =0;
             while ((len = fis2.read(by,0,2))!=-1) {
                 System.out.println(new String(by,0,len));
            }
             
             //------------a -----------//
            //------------wo-----------//
        }
    }    
    1.0

    2.2 OutPutStream

      2.2.1 FileOutputStream

      a:构造方法

    package d8;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    
    public class FileOutputStreamGouZao {
        public static void main(String[] args) throws FileNotFoundException {
            
            //创建字节输出流对象做了3件事情
            //01 调用系统功能创建文件
            //02 创建fos对象
            //03 将字节输出流对象指向对应的文件
    
            // 方式一:根据一个路径得到一个写入数据的输出文件流对象
            // FileOutputStream(String name)
            FileOutputStream fos = new FileOutputStream("D:\aaa\a.txt");
    
            // 方式二,通过File对象 得到一个写入数据的输出文件流对象
            // FileOutputStream(File file)
            File fe = new File("D:\aaa", "a.txt");
            FileOutputStream fos2 = new FileOutputStream(fe);
    
            // 方式三:根据一个路径得到一个写入数据的输出文件流对象,如为 true,则将字节写入文件末尾处
            // FileOutputStream(String name,boolean append)
            FileOutputStream fos3 = new FileOutputStream("D:\aaa\a.txt", true);
    
            // 方式四,通过File对象 得到一个写入数据的输出文件流对象,如为 true,则将字节写入文件末尾处
            // FileOutputStream((File file,boolean append)
            File fe2 = new File("D:\aaa", "a.txt");
            FileOutputStream fos4 = new FileOutputStream(fe2, true);
        }
    }
    1.0

      b:写入方法

    package d8;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class FileOutputStreamWrite {
        public static void main(String[] args) throws IOException {
    
            // 创建字节输出流对象做了3件事情
            // 01 调用系统功能创建文件
            // 02 创建fos对象
            // 03 将字节输出流对象指向对应的文件
    
            // close()方法的作用
            // 1:让流对象变成垃圾,方便被垃圾回收站回收
            // 2:通知系统去释放掉该文件相关的资源
    
            // 方式一:
            // write(byte[] b) 根据一个路径将指定 byte 数组写入此文件输出流中
    
            FileOutputStream fos = new FileOutputStream("D:\aaa\a.txt");
            fos.write("Hello World !".getBytes());
            fos.close();
            // -------Hello World !---------//
    
            // 方式二
            // write(int b) 将指定字节写入此文件输出流。
            FileOutputStream fos2 = new FileOutputStream("D:\aaa\b.txt");
            fos2.write(97);
            fos2.close();
            // -------a---------//
    
            // write(byte[] b, int off, int len)
            // 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
            FileOutputStream fos3 = new FileOutputStream("D:\aaa\c.txt");
            fos3.write("Hello World !".getBytes(), 0, 5);
            fos3.close();
            // -------Hello---------//
        }
    }
    1.0
    package d8;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class FileOutputStreamWrite2 {
        public static void main(String[] args) throws IOException {
    
            // 创建字节输出流对象做了3件事情
            // 01 调用系统功能创建文件
            // 02 创建fos对象
            // 03 将字节输出流对象指向对应的文件
    
             
            // 方式一:
            // write(byte[] b) 根据一个路径将指定 byte 数组写入此文件输出流中
    
            FileOutputStream fos = new FileOutputStream("D:\aaa\a.txt",true);
            fos.write('
    ');
            fos.write('
    ');
            fos.write("Hello World !".getBytes());
            fos.close();
            //-------Hello World !---------//
            //--------Hello World ! ---------//
            // 方式二
            // write(int b) 将指定字节写入此文件输出流。
            File fe2 = new File("D:\aaa", "b.txt");
            FileOutputStream fos2 = new FileOutputStream(fe2, true);
             
            fos2.write(97);
            fos2.close();
            //-------aa---------//
            
         
        }
    }
    2.0

      2.2.2 BufferedOutputStream

      a:构造方法

    package d8;
    
     
    import java.io.BufferedOutputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class BufferedOutputStreamGouZao {
        public static void main(String[] args) throws IOException   {
             
            // 方式一:根据一个路径得到一个写入数据的输出文件流对象
            //BufferedOutputStream(OutputStream out) 
            BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream("D:\aaa\a.txt"));
    
            // 方式二,通过Buffered对象 得到一个写入数据的输出文件流对象
            // BufferedOutputStream(OutputStream out, int size) 
            BufferedOutputStream fos2 = new BufferedOutputStream(new FileOutputStream("D:\aaa\a.txt"),1024);
    
        }
    }
    1.0

      b:写入方法

    package d8;
    
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class BufferedOutputStreamWrite {
        public static void main(String[] args) throws IOException {
    
            // 方式一
            // write(int b) 将指定字节写入此文件输出流。
            BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream("D:\aaa\a.txt"));
            fos.write(97);
            fos.close();
            // -------a---------//
    
            // write(byte[] b, int off, int len)
            // 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
            BufferedOutputStream fos2 = new BufferedOutputStream(new FileOutputStream("D:\aaa\a.txt",true), 1024);
            fos2.write("hello world java".getBytes(), 5, 3);
            fos2.close();
             //------------a wo-----------//
        }
    }
    1.0

     练习:4钟操作的复制文件

    package d8;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    public class CopyTest {
        public static void main(String[] args) throws IOException {
            Long start = System.currentTimeMillis();
            method1();
            Long end = System.currentTimeMillis();
            System.out.println("方法一:耗时"+(end-start));
            Long start2 = System.currentTimeMillis();
            method2();
            Long end2 = System.currentTimeMillis();
            System.out.println("方法二:耗时"+(end2-start2));
            
            Long start3 = System.currentTimeMillis();
            method3();
            Long end3 = System.currentTimeMillis();
            System.out.println("方法三:耗时"+(end3-start3));
            
            Long start4 = System.currentTimeMillis();
            method4();
            Long end4 = System.currentTimeMillis();
            System.out.println("方法四:耗时"+(end4-start4));
        }
    
        private static void method4() throws IOException {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\aaa\a.avi"));
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\aaa\a4.avi"));
            byte [] by = new byte[1024];
            int len =0;
            while ((len=bis.read(by))!=-1) {
                bos.write(by,0,len);
                bos.flush();
            } 
            bis.close();
            bos.close();
        }
        //高效字节流,一次读写一个字节
        private static void method3() throws IOException {
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\aaa\a.avi"));
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\aaa\a3.avi"));
            int b =0;
            while ((b=bis.read())!=-1) {
                bos.write(b);
            }
            bis.close();
            bos.close();
        }
        //基本字节流,一次读写一个数组长度
        private static void method2() throws IOException {
            FileInputStream fi2 = new FileInputStream("D:\aaa\a.avi");
            FileOutputStream fo2 = new FileOutputStream("D:\aaa\a2.avi");
            byte [] by = new byte[1024];
            int len =0;
            while ((len=fi2.read(by))!=-1) {
                fo2.write(by,0,len);
            } 
            fi2.close();
            fo2.close();
        }
        
        //基本字节流,一次读写一个字节
        private static void method1() throws IOException {
            FileInputStream fi = new FileInputStream("D:\aaa\a.avi");
            FileOutputStream fo = new FileOutputStream("D:\aaa\a1.avi");
            int b =0;
            while ((b=fi.read())!=-1) {
                fo.write(b);
            } 
            fi.close();
            fo.close();
        }
    }
    /*
     方法一:耗时243369
    方法二:耗时302
    方法三:耗时416
    方法四:耗时270
    */
    1.0

    字符流 = 字节流+编码表 

    3.1 Reader

      3.1.1 InputStreamReader

      a:构造方法  

    package d8;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    
    public class InputStreamReaderGouZao {
        public static void main(String[] args) throws FileNotFoundException, IOException {
    
            // 字符输入流:字节输入流+编码
    
            // 方式一:根据一个字节输入流 + 默认编码 得到一个字符输入对象
            // InputStreamReader(InputStream In)
            InputStreamReader isw = new InputStreamReader(new FileInputStream("D:\aaa\a.txt"));
    
            // 方式二:根据一个字节输入流 + 指定编码 得到一个字符输入对象
            // InputStreamReader(InputStream In, String charsetName)
            InputStreamReader isw2 = new InputStreamReader(new FileInputStream("D:\aaa\a.txt"), "utf-8");
    
        }
    }
    1.0

      b:read方法 

    package d8;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    
    public class InputStreamReaderRead {
        public static void main(String[] args) throws FileNotFoundException, IOException {
    
            // 字符输入流:字节输入流+编码
    
            // 方式一:根据一个字节输入流 + 默认编码 得到一个字符输入对象
            // InputStreamReader(InputStream In)
            InputStreamReader osw = new InputStreamReader(new FileInputStream("D:\aaa\b.txt"));
    
            int b = 0;
            while ((b=osw.read())!=-1) {
                System.out.print((char)b);
            }
            // 方式二:根据一个字节输入流 + 指定编码 得到一个字符输入对象
            // InputStreamReader(InputStream In, String charsetName)
            InputStreamReader osw2 = new InputStreamReader(new FileInputStream("D:\aaa\b.txt"), "utf-8");
            char [] by =new char[5];
            int len=0;
            while ((len=osw2.read(by, 0, 3))!=-1) {
                System.out.println(new String(by,0,len));
            }
        }
    }
    /*浣犲ソ涓栫晫你好世
    界*/
    1.0

    3.1.2 FileReader

     a:构造方法

    package d8;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.FileReader;
    import java.io.UnsupportedEncodingException;
    
    public class FileReaderGouZao {
        public static void main(String[] args) throws FileNotFoundException, IOException {
    
            // 方式一:根据一个字节输入流 + 默认编码 得到一个字符输入对象
            // FileReader(File file)
            FileReader isw = new FileReader("D:\aaa\a.txt");
    
            // 方式二:在给定从中读取数据的文件名的情况下创建一个新 FileReader。
            // FileReader( String fileName)
            FileReader isw2 = new FileReader(new File("D:\aaa\a.txt"));
    
        }
    }
    1.0

    b:read方法 

    package d8;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    
    public class FileReaderRead {
        public static void main(String[] args) throws FileNotFoundException, IOException {
    
            // 方式一:根据一个字节输入流 + 默认编码 得到一个字符输入对象
            // FileReader(File file)
            FileReader fr = new FileReader("D:\aaa\a.txt");
            int b = 0;
            while ((b = fr.read()) != -1) {
                System.out.print((char) b);
            }
    
            // 方式二:在给定从中读取数据的文件名的情况下创建一个新 FileReader。
            // FileReader( String fileName)
            FileReader fr2 = new FileReader(new File("D:\aaa\a.txt"));
            char[] by = new char[5];
            int len = 0;
            while ((len = fr2.read(by, 0, 3)) != -1) {
                System.out.println(new String(by, 0, len));
            }
        }
    }
    /*
     * aaabcdefaaa
    bcd
    ef
     */
    1.0

    3.1.3 BufferedReader

     a:构造方法

    package d8;
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class BufferedReaderGouZao {
        public static void main(String[] args) throws  IOException {
    
            // 方式一:根据一个字节输入流 + 默认编码 得到一个字符输入对象
            // BufferedReader(Reader in)
            BufferedReader br = new BufferedReader(new FileReader("D:\aaa\a.txt"));
    
            // 方式二:BufferedReader(Reader in, int sz) 
            // 创建一个使用指定大小输入缓冲区的缓冲字符输入流。
            BufferedReader br2 = new BufferedReader(new FileReader("D:\aaa\a.txt"),1024);
    
        }
    }
    1.0

     b:read方法 

    package d8;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    
    public class BufferedReaderRead {
        public static void main(String[] args) throws FileNotFoundException, IOException {
    
            // 方式一:BufferedReader(Reader in)
            // 创建一个使用指定大小输入缓冲区的缓冲字符输入流。
            BufferedReader br = new BufferedReader(new FileReader("D:\aaa\a.txt"));
            int b = 0;
            while ((b = br.read()) != -1) {
                System.out.print((char) b);
            }
    
            // 方式二:BufferedReader(Reader in, int sz)
            // 创建一个使用指定大小输入缓冲区的缓冲字符输入流。
            BufferedReader br2 = new BufferedReader(new FileReader("D:\aaa\a.txt"), 1024);
            char[] by = new char[5];
            int len = 0;
            while ((len = br2.read(by, 0, 3)) != -1) {
                System.out.println(new String(by, 0, len));
            }
        }
    }
    /*
     * aaaa
     */
    1.0

     2.0 写入一个文本行

    3.2 Writer

      3.2.1 OutputStreamWriter

     a:构造方法

    package d8;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    
    public class OutputStreamWriterGouZao {
        public static void main(String[] args) throws FileNotFoundException, IOException {
    
            // 字符输出流:字节输出流+编码
    
            // 方式一:根据一个字节输出流 + 默认编码 得到一个字符输出对象
            // OutputStreamWriter(OutputStream out)
            OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\aaa\a.txt"));
    
            // 方式二:根据一个字节输出流 + 指定编码 得到一个字符输出对象
            // OutputStreamWriter(OutputStream out, String charsetName)
            OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream("D:\aaa\a.txt"), "utf-8");
    
        }
    }
    1.0

    b: Write方法

    package d8;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    
    public class OutputStreamWriterWrite {
        public static void main(String[] args) throws FileNotFoundException, IOException {
    
            // 方式一: 写入单个字符 write(int c)
            OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\aaa\a.txt"));
            osw.write(97);
            osw.write('a');
            osw.close();
    
            // 方式二:写入字符数组。 write(char[] cbuf)
            OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream("D:\aaa\b.txt"), "utf-8");
            char[] che = { 'a', 'b', 'c', 'd', 'e', 'f' };
            osw2.write(che);
            osw2.flush();
            osw2.close();
    
            // 方式三:写入字符数组的某一部分。 write(char[] cbuf, int off, int len)
            OutputStreamWriter osw3 = new OutputStreamWriter(new FileOutputStream("D:\aaa\c.txt"));
            char[] che2 = { 'a', 'b', 'c', 'd', 'e', 'f' };
            osw3.write(che2, 2, 3);
            osw3.write("Hello world".toCharArray());
            
            osw3.close();
    
            // 方式四: 写入字符串 。 write(String str)
            OutputStreamWriter osw4 = new OutputStreamWriter(new FileOutputStream("D:\aaa\d.txt"), "utf-8");
            String str = "Hello World Java";
            osw4.write(str);
            osw4.flush();
            osw4.close();
    
            // 方式五: 写入字符串的某一部分。 write(String str, int off, int len)
            OutputStreamWriter osw5 = new OutputStreamWriter(new FileOutputStream("D:\aaa\e.txt"), "utf-8");
            String str2 = "Hello World Java";
            osw5.write(str2,3,4);
            osw5.flush();
            osw5.close();
        }
    }
    
    /*
     * aa
     * abcdef
     * cdeHello world
     * Hello World Java
     * lo W
     */
    1.0

     3.2.2 FileWriter

     a:构造方法

    package d8;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    
    import java.io.IOException;
    import java.io.FileWriter;
    import java.io.UnsupportedEncodingException;
    
    public class FileWriterGouZao {
        public static void main(String[] args) throws FileNotFoundException, IOException {
     
            // 方式一: 根据给定的文件名值来构造 FileWriter 对象
            // FileWriter(String fileName) 
            FileWriter fw = new FileWriter("D:\aaa\a.txt");
    
            // 方式二: 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象
            // FileWriter(String fileName, boolean append) 
            FileWriter fw2 = new FileWriter(("D:\aaa\a.txt"),true);
            
    
            // 方式三: 根据给定的文件名值来构造 FileWriter 对象
            // FileWriter(File file) 
            FileWriter fw3 = new FileWriter(new File("D:\aaa\a.txt") );
    
            // 方式四: 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象
            //FileWriter(File file, boolean append) 
            FileWriter fw4 = new FileWriter(new File("D:\aaa","a.txt"),true);
    
        }
    }
    1.0

    b: Write方法

    package d8;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    
    public class FileWriterWrite {
        public static void main(String[] args) throws FileNotFoundException, IOException {
    
            // 方式一: 根据给定的文件名值来构造 FileWriter 对象
            // FileWriter(String fileName)
            FileWriter fw = new FileWriter("D:\aaa\a.txt");
            // 方式一: 写入单个字符 write(int c)
            fw.write(97);
            fw.write('a');
            fw.close();
            
            
            // 方式二: 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象
            // FileWriter(String fileName, boolean append)
            FileWriter fw2 = new FileWriter(("D:\aaa\a.txt"), true);
            // 方式二:写入字符数组。 write(char[] cbuf)
            char[] che = { 'a', 'b', 'c', 'd', 'e', 'f' };
            fw2.write(che);
            fw2.flush();
            fw2.close();
            
    
            
            // 方式三: 根据给定的文件名值来构造 FileWriter 对象
            // FileWriter(File file)
            FileWriter fw3 = new FileWriter(new File("D:\aaa\b.txt"));
            // 方式三:写入字符数组的某一部分。 write(char[] cbuf, int off, int len)
            char[] che2 = { 'a', 'b', 'c', 'd', 'e', 'f' };
            fw3.write(che2, 2, 3);
            fw3.close();
            
    
            // 方式四: 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象
            // FileWriter(File file, boolean append)
            FileWriter fw4 = new FileWriter(new File("D:\aaa", "b.txt"), true); 
            // 方式四: 写入字符串 。 write(String str)         
            String str = "Hello World Java";
            fw4.write(str);
            fw4.flush();
            fw4.close();
            
    
            // 方式一: 根据给定的文件名值来构造 FileWriter 对象
            // FileWriter(String fileName)
            FileWriter fw5 = new FileWriter("D:\aaa\c.txt");
            // 方式五: 写入字符串的某一部分。 write(String str, int off, int len)
            String str2 = "Hello World Java";
            fw5.write(str2, 3, 4);
            fw5.flush();
            fw5.close();
        }
    }
    
    /*
     *aaabcdef
     *cdeHello World Java
     *lo W
     */
    1.0

     3.2.3 BufferedWwriter

     a:构造方法

    package d8;
    
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class BufferedWriterGouZao {
        public static void main(String[] args) throws  IOException {
     
            // 方式一:  创建一个使用默认大小输出缓冲区的新缓冲字符输出流。
            // BufferedWriter(Writer out) 
            BufferedWriter bw = new BufferedWriter( new FileWriter("D:\aaa\a.txt"));
    
            // 方式二:  创建一个使用给定大小输出缓冲区的新缓冲字符输出流。
            // BufferedWriter(Writer out, int sz)  
            BufferedWriter bw2 = new BufferedWriter( new FileWriter("D:\aaa\a.txt"),1024);
             
        }
    }
    1.0

    b: Write方法

    package d8;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    
    public class BufferedWriterWrite {
        public static void main(String[] args) throws FileNotFoundException, IOException {
    
    
            // 方式一:  创建一个使用默认大小输出缓冲区的新缓冲字符输出流。
            // BufferedWriter(Writer out) 
            BufferedWriter bw = new BufferedWriter( new FileWriter("D:\aaa\a.txt"));
            // 方式一: 写入单个字符 write(int c)
            bw.write(97);
            bw.write('a');
            bw.close();
                    
                    
            // 方式二:  创建一个使用给定大小输出缓冲区的新缓冲字符输出流。
            // BufferedWriter(Writer out, int sz)  
            BufferedWriter bw2 = new BufferedWriter( new FileWriter("D:\aaa\b.txt"),1024);
            // 方式二:写入字符数组。 write(char[] cbuf)
            char[] che = { 'a', 'b', 'c', 'd', 'e', 'f' };
            bw2.write(che);
            bw2.flush();
            bw2.close();
    
            // 方式一:  创建一个使用默认大小输出缓冲区的新缓冲字符输出流。
            // BufferedWriter(Writer out) 
            BufferedWriter bw3 = new BufferedWriter( new FileWriter("D:\aaa\c.txt"));
            // 方式三:写入字符数组的某一部分。 write(char[] cbuf, int off, int len)
            char[] che2 = { 'a', 'b', 'c', 'd', 'e', 'f' };
            bw3.write(che2, 2, 3);
            bw3.close();
            
    
            // 方式一:  创建一个使用默认大小输出缓冲区的新缓冲字符输出流。
            // BufferedWriter(Writer out) 
            BufferedWriter bw4 = new BufferedWriter( new FileWriter("D:\aaa\d.txt"));
            // 方式四: 写入字符串 。 write(String str)         
            String str = "Hello World Java";
            bw4.write(str);
            bw4.flush();
            bw4.close();
            
    
            // 方式一:  创建一个使用默认大小输出缓冲区的新缓冲字符输出流。
            // BufferedWriter(Writer out) 
            BufferedWriter bw5 = new BufferedWriter( new FileWriter("D:\aaa\e.txt"));
            // 方式五: 写入字符串的某一部分。 write(String str, int off, int len)
            String str2 = "Hello World Java";
            bw5.write(str2, 3, 4);
            bw5.flush();
            bw5.close();
        }
    }
    
    /*
     *aa
     *abcdef
     *cde
     *Hello World Java
     *lo W
     */
    1.0

     2.0 写入一个行分隔符

     3.3 练习

    练习1:5中方法复制文本文件

    package d8;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class CopyTxt {
    
        public static void main(String[] args) throws IOException {
            Long start = System.currentTimeMillis();
            method1();
            Long end = System.currentTimeMillis();
            System.out.println("方法一:耗时"+(end-start));
            Long start2 = System.currentTimeMillis();
            method2();
            Long end2 = System.currentTimeMillis();
            System.out.println("方法二:耗时"+(end2-start2));
            
            Long start3 = System.currentTimeMillis();
            method3();
            Long end3 = System.currentTimeMillis();
            System.out.println("方法三:耗时"+(end3-start3));
            
            Long start4 = System.currentTimeMillis();
            method4();
            Long end4 = System.currentTimeMillis();
            System.out.println("方法四:耗时"+(end4-start4));
            
            Long start5 = System.currentTimeMillis();
            method5();
            Long end5 = System.currentTimeMillis();
            System.out.println("方法五:耗时"+(end5-start5));
    
        }
    
        private static void method5() throws IOException {
            // Buffered 一次读取一个字符数组
            FileReader fr = new FileReader("D:\aaa\a.txt");
            FileWriter fw = new FileWriter("D:\aaa\b.txt", true);
            BufferedReader br = new BufferedReader(fr);
            BufferedWriter bw = new BufferedWriter(fw);
    
            bw.write("--方法五,FileXXX 开始");
            bw.newLine();
            String line;
            while ((line = br.readLine()) != null) {
                bw.write(line);;
            }
            bw.newLine();
            bw.write("--方法五,FileXXX 结束");
            bw.newLine();
            // 释放资源
            br.close();
            bw.close();
        }
    
        private static void method4() throws IOException {
            // Buffered 一次读取一个字符数组
            FileReader fr = new FileReader("D:\aaa\a.txt");
            FileWriter fw = new FileWriter("D:\aaa\b.txt", true);
            BufferedReader br = new BufferedReader(fr);
            BufferedWriter bw = new BufferedWriter(fw);
    
            bw.write("--方法四,FileXXX 开始");
            bw.newLine();
            int len = 0;
            char[] ch = new char[5];
            while ((len = br.read(ch)) != -1) {
                bw.write(ch, 0, len);
            }
            bw.newLine();
            bw.write("--方法四,FileXXX 结束");
            bw.newLine();
            // 释放资源
            br.close();
            bw.close();
        }
    
        private static void method3() throws IOException {
            // Buffered 一次读取一个字符
            FileReader fr = new FileReader("D:\aaa\a.txt");
            FileWriter fw = new FileWriter("D:\aaa\b.txt", true);
            BufferedReader br = new BufferedReader(fr);
            BufferedWriter bw = new BufferedWriter(fw);
    
            bw.write("--方法三,FileXXX 开始");
            bw.newLine();
            int i = 0;
            while ((i = br.read()) != -1) {
                bw.write((i));
            }
            bw.newLine();
            bw.write("--方法三,FileXXX 结束");
            bw.newLine();
            // 释放资源
            br.close();
            bw.close();
        }
    
        private static void method2() throws IOException {
            // File 一次读取一个字符数组
            FileReader fr = new FileReader("D:\aaa\a.txt");
            FileWriter fw = new FileWriter("D:\aaa\b.txt", true);
            fw.write("--方法二,FileXXX 开始");
            fw.write("
    ");
            int len = 0;
            char[] ch = new char[5];
            while ((len = fr.read(ch)) != -1) {
                fw.write(ch, 0, len);
            }
            fw.write("
    ");
            fw.write("--方法二,FileXXX 结束");
            fw.write("
    ");
            // 释放资源
            fr.close();
            fw.close();
        }
    
        private static void method1() throws IOException {
            // File 一次读取一个字符
            FileReader fr = new FileReader("D:\aaa\a.txt");
            FileWriter fw = new FileWriter("D:\aaa\b.txt");
            fw.write("--方法一,FileXXX 开始");
            fw.write("
    ");
            int i = 0;
            while ((i = fr.read()) != -1) {
                fw.write((i));
            }
            fw.write("
    ");
            fw.write("--方法一,FileXXX 结束");
            fw.write("
    ");
            // 释放资源
            fr.close();
            fw.close();
    
        }
    /*
     * 方法一:耗时3
    方法二:耗时2
    方法三:耗时2
    方法四:耗时1
    方法五:耗时1
    
    *
    *
    *
    *--方法一,FileXXX 开始
    aa
    bb
    cc
    dd
    ee
    ff
    gg
    --方法一,FileXXX 结束
    --方法二,FileXXX 开始
    aa
    bb
    cc
    dd
    ee
    ff
    gg
    --方法二,FileXXX 结束
    --方法三,FileXXX 开始
    aa
    bb
    cc
    dd
    ee
    ff
    gg
    --方法三,FileXXX 结束
    --方法四,FileXXX 开始
    aa
    bb
    cc
    dd
    ee
    ff
    gg
    --方法四,FileXXX 结束
    --方法五,FileXXX 开始
    aabbccddeeffgg
    --方法五,FileXXX 结束
    */
    }
    1.0

     4:综合练习

    1:复制单级文件夹

    package d8;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class CopySingeFolder {
        public static void main(String[] args) throws IOException {
            // 需求:将单层文件夹例如:aaa文件下内容(只有文件)复制到bbb文件
    
            // 根据文件路径获取文件集合
            File srcFolder = new File("D:\aaa");// 源文件
            File destFolder = new File("D:\bbb");// 目标文件
    
            // 如果目标路径不存在,就创建,如果存在,就清空
            if (destFolder.exists()) {
                //清空文件夹
                clearFolder(destFolder);
            }
            destFolder.mkdir();
            // 获取源文件夹中的文件
            CopyFolder(srcFolder,destFolder);
            
            
        }
    
        //复制文件
        private static void CopyFolder(File srcFolder, File destFolder) throws IOException {
            File[] srcFiles = srcFolder.listFiles();
            if (srcFiles.length > 0) {            
                for (File file : srcFiles) {
                    CopyFile(file,destFolder);
                }
            }
        }
    
         
    
        private static void CopyFile(File file, File destFolder) throws IOException {
            BufferedInputStream bis= new BufferedInputStream(new FileInputStream(file));
            String destName = file.getName();
            BufferedOutputStream bos= new BufferedOutputStream(new FileOutputStream(new File(destFolder,destName)));
            int len=0;
            byte [] by=new byte[1024];
            while ((len=bis.read(by))!=-1) {
                bos.write(by,0,len);
            }
            bos.close();
            bis.close();
        }
    
        //清空目标文件夹
        private static void clearFolder(File destFolder) {
            // TODO Auto-generated method stub
            File [] destFiles =destFolder.listFiles();
            if (destFiles!=null&&destFiles.length>0) {
                for (File file : destFiles) {
                    file.delete();
                }
            }
            destFolder.delete();
        }
     
    }
    1.0

     2:复制文件

    package d8;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class CopyMultistageFolder {
        public static void main(String[] args) throws IOException {
            // 需求:文件夹复制
    
            // 根据文件路径获取文件集合
            File srcFolder = new File("D:\aaa");// 源文件
            File destFolder = new File("D:\bbb");// 目标文件
    
            // 如果目标路径不存在,就创建,如果存在,就清空
            if (destFolder.exists()) {
                //清空文件夹
                clearFolder(destFolder);
            }
            destFolder.mkdir();
            // 获取源文件夹中的文件
            CopyFolder(srcFolder,destFolder);
            
            
        }
    
        //复制文件
        private static void CopyFolder(File srcFolder, File destFolder) throws IOException {
            File[] srcFiles = srcFolder.listFiles();
            if (srcFiles.length > 0) {            
                for (File file : srcFiles) {
                    if (file.isFile()) {
                        CopyFile(file,destFolder);
                    }
                    else if (file.isDirectory()) {
                        //创建一个文件夹
                        File newFolder = new File(destFolder.getAbsolutePath(),file.getName());// 目标文件
                        newFolder.mkdir();
                        CopyFolder(file,newFolder);
                    }
                }
            }
        }
    
         
    
        private static void CopyFile(File file, File destFolder) throws IOException {
            BufferedInputStream bis= new BufferedInputStream(new FileInputStream(file));
            String destName = file.getName();
            BufferedOutputStream bos= new BufferedOutputStream(new FileOutputStream(new File(destFolder,destName)));
            int len=0;
            byte [] by=new byte[1024];
            while ((len=bis.read(by))!=-1) {
                bos.write(by,0,len);
            }
            bos.close();
            bis.close();
        }
    
        //清空目标文件夹
        private static void clearFolder(File destFolder) {
            //级联删除
            if (destFolder.isFile()||destFolder == null ) {
                destFolder.delete();
            }else if(destFolder.isDirectory()&&destFolder.listFiles().length<1) {
                destFolder.delete();
            }else {
                File [] destFiles =destFolder.listFiles();
                if (destFiles!=null&&destFiles.length>0) {
                    for (File file : destFiles) {
                        clearFolder(file);
                    }
                }
                destFolder.delete();
            }
            
            
            destFolder.delete();
        }
     
    }
    1.0

     3:模拟BufferedReader的readLine()+ BufferedWriter的newLine()+LineNumberReader的getLineNumber()和setLineNumber()

    package d8;
    
    import java.io.IOException;
    import java.io.Reader;
    
    public class MyBufferedReader {
        private Reader r;
    
        public MyBufferedReader(Reader r) {
             this.r =r;
        }
    
        public String readLine() throws IOException {
            StringBuilder sb = new StringBuilder();
            int i = 0;
            while ((i = r.read()) != -1) {
                if (i == '
    ') {
                    continue;
                } 
                if (i == '
    ') {
                    return sb.toString();
                }else {
                    sb.append((char)i);
                }
            }
            if (sb.toString().length()>0) {
                return sb.toString();
            }
            return null;
        }
    
        // close方法
        public void close() throws IOException {
            r.close();
        }
    }
    MyBufferedReader
    package d8;
    
    import java.io.IOException;
    import java.io.Writer;
    
    public class MyBufferedWriter {
        //首先需要一個屬性Writer 
        private Writer w;
         //創建一個構造方法
        public MyBufferedWriter( Writer w) {
            this.w =w;
        }
        public void newLine () throws IOException {
            w.write('
    ');
            w.write('
    ');
        }
        public void write (String str) throws IOException {
            w.write(str);         
        }
        public void close() throws IOException {
            w.close();
        }
    }
    
     
    MyBufferedWriter
    package d8;
    
    import java.io.IOException;
    import java.io.Reader;
    
    public class MyLineNumberReader {
        private Reader r;
        private int lineNumber;
        public MyLineNumberReader(Reader r) {
             this.r =r;
        }
    
        public String readLine() throws IOException {
            lineNumber++;
            StringBuilder sb = new StringBuilder();
            int i = 0;
            while ((i = r.read()) != -1) {
                if (i == '
    ') {
                    continue;
                } 
                if (i == '
    ') {
                    return sb.toString();
                }else {
                    sb.append((char)i);
                }
            }
            if (sb.toString().length()>0) {
                return sb.toString();
            }
            return null;
        }
    
        public int getLineNumber() {
            return lineNumber;
        }
    
        public void setLineNumber(int lineNumber) {
            this.lineNumber = lineNumber;
        }
    
        // close方法
        public void close() throws IOException {
            r.close();
        }
    }
    MyLineNumberReader 1.0
    package d8;
    
    import java.io.IOException;
    import java.io.Reader;
    
    public class MyLineNumberReader2 extends MyLineNumberReader {
    
        private Reader r;
        private int lineNumber;
        public MyLineNumberReader2(Reader r) {
            super(r); 
        }
        public String readLine() throws IOException {
            lineNumber++;
            return super.readLine();
        }
    
        public int getLineNumber() {
            return lineNumber;
        }
    
        public void setLineNumber(int lineNumber) {
            this.lineNumber = lineNumber;
        }
    }
    MyLineNumberReader2
    package d8;
    
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class MyBufferedTest {
         public static void main(String[] args) throws IOException {
            MyBufferedReader mbr = new MyBufferedReader(new FileReader("D:\aaa\a.txt"));
            MyBufferedWriter mbw = new MyBufferedWriter(new FileWriter("D:\aaa\b.txt"));
            String line = "";
            while ((line = mbr.readLine())!=null) {
                System.out.println(line);
                mbw.write(line);
                mbw.newLine();
                mbw.write("哈哈");
                mbw.newLine();
            }
            mbr.close();
            mbw.close();
            
            MyLineNumberReader mlnr = new MyLineNumberReader(new FileReader("D:\aaa\a.txt"));
            mlnr.setLineNumber(100);
            while ((line = mlnr.readLine())!=null) {
                System.out.println(mlnr.getLineNumber()+":"+line);
                }
            mlnr.close();
            
            MyLineNumberReader2 mlnr2 = new MyLineNumberReader2(new FileReader("D:\aaa\a.txt"));
            mlnr2.setLineNumber(10);
            while ((line = mlnr2.readLine())!=null) {
                System.out.println(mlnr2.getLineNumber()+":"+line);
                }
            mlnr2.close();
        }
    }
    MyBufferedTest
  • 相关阅读:
    CentOS 6.6 下源码编译安装MySQL 5.7.5
    CentOS 6.6下安装配置Tomcat环境
    Redhat6.7 切换Centos yum源
    css盒模型
    mysql 查询表占用空间大小
    ligerform 控件元素设置为只读
    FtpClient中文文件名下载失败问题
    java Runtime.exec() 执行问题
    java log4j动态生成log文件
    java udp地址匹配
  • 原文地址:https://www.cnblogs.com/YK2012/p/8375731.html
Copyright © 2020-2023  润新知