zoukankan      html  css  js  c++  java
  • java===IO字节流、字符流

    package IO字符流;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class CharStreamBufferDemo1 {
    
        public static void main(String[] args) throws IOException {
            method_1();
            method_2();
        }
        public static void method_2() throws IOException {
            FileReader fr1 = new FileReader("IOTest.txt");
            BufferedReader br1 = new BufferedReader(fr1);
            String line;
            //缓冲区的read()方法是重写的,不是在硬盘中读取数据,而是在内存中读取数组,所以效率更高
            //readline();原理:调用缓冲区的read()方法,然后进行判断换行标记,将标记前的数据变成字符串返回;
            while((line=br1.readLine())!=null){
                System.out.println(line);
            }
        }
        public static void method_1()throws IOException{
            FileWriter fw1 = new FileWriter("IOTest.txt");
            BufferedWriter bw1 = new BufferedWriter(fw1);
            bw1.write("abc");
            bw1.flush();
            bw1.newLine();
            bw1.write("IO");
            bw1.close();
        }
    
    }
    package IO字符流;
    
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.LineNumberReader;
    
    public class LineNumberReaderDemo {
    
        public static void main(String[] args) throws IOException {
            FileReader fr1 = new FileReader("demo.txt");
            LineNumberReader lnr1 = new LineNumberReader(fr1);
            String line;
            //默认从0开始;
            lnr1.setLineNumber(0);
            while((line=lnr1.readLine())!=null){
                //读取限定行内容时可以使用;
                if(lnr1.getLineNumber()>2)
                   System.out.println(line+":"+lnr1.getLineNumber());
            }
    
        }
    
    }
    package IO字符流;
    
    import java.io.FileReader;
    import java.io.IOException;
    
    /**自定义一个缓冲区,模拟BufferedReader里面的read readLine close 等方法
     * 分析:
     * 缓冲区中无非就是封装一个数组,并对外提供更多的方法对数组进行访问,
     * 其实这些方法最终操作的都是数组的角标。
     * 
     * 缓冲的原理:
     * 其实就是从源中获取一批数据,装进缓冲区中,
     * 从缓冲区中不断取出一个一个数据;
     * 
     * 在此次取完后,再从源中继续取一批数据进缓冲区,
     * 当源中的数据取光时,用-1作为结束标记。
     * 
     * */
    public class MyBufferedReaderTest {
        private FileReader  fr;
        //创建一个数组作为缓冲区;
        private char [] buf = new char[1024];
        //定义一个指针操作数组元素,当操作最后一个元素后指针归零;
        private int pos=0;
        //顶一个变量用于记录缓冲区的数据个数,当该数据减到零,就从源中继续获取数据到缓冲区中。
        private int count=0;
        public MyBufferedReaderTest(FileReader  fr) {
            this.fr=fr;
        }
        public int myRead() throws IOException{
            //1、从源中获取一批数据到缓冲区中。需要判断,只有计数器为0时,才需要取数据。
            if(count==0){
               count=fr.read(buf);
               //每次获取数据到缓冲区后角标归零;
               pos=0;
              
            }
            if(count<0){
                return -1;
            }
             char ch= buf[pos];
               pos++;
               count--;
               return ch;
        }
        public String myReadLine() throws IOException{
            StringBuilder sb = new StringBuilder();
            int ch=0;
            while((ch=myRead())!=-1){
                if(ch=='
    ')
                    continue;
                if(ch=='
    '){
                    return sb.toString();
                }
                //将从缓冲区中读到的字符,存到另一个缓冲区中
                sb.append(buf[ch]);
            }
            if(sb.length()!=0){
                return sb.toString();
            }
            //读到-1,返回空,表明没有数据可读了;
            return null;
            
        }
        public void myClose() throws IOException{
            fr.close();
        }
    
        
    }
    package IO字符流;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class BufferedTest {
    
        public static void main(String[] args) throws IOException {
            FileReader fr1 = new FileReader("buff.txt");
            BufferedReader br1 = new BufferedReader(fr1);
            FileWriter fw1 = new FileWriter("copy.txt");
            BufferedWriter bw1 = new BufferedWriter(fw1);
            String line = null;
            int count=0;
            while ((line = br1.readLine()) != null) {
                if (line.contains("java")){
                    bw1.write(line);
                    bw1.newLine();
                    bw1.flush();
                    count++;
                }
                
            }
            System.out.println("发现匹配文件"+count+"个");
            /*
             * int ch=0; while((ch=br1.read())!=-1){ bw1.write(ch); }
             */
            br1.close();
            bw1.close();
    
        }
    
    }
    package IO字节流;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Input_outputStreamDemo {
    
        public static void main(String[] args) throws IOException {
    
            demo_write();
            demo_read();
        }
    
        public static void demo_read() throws IOException {
            //1、创建一个读取流对象。和指定文件关联
            FileInputStream fs1 = new FileInputStream("bytedemo.txt");
            //一次读一个字节
            /*
            int ch=0;
            while((ch=fs1.read())!=-1){
                System.out.println(ch);
            }    
            fs1.close();*/
            //数组读取,建议使用这种
            /*
            byte[]buf = new byte[1024];
            int len=0;
            while((len=fs1.read(buf))!=-1){
                System.out.println(new String(buf,0,len));
            }*/
            //慎用方法,根据文件大小创建数组
            byte[]buf=new byte[fs1.available()];
            fs1.read(buf);
            System.out.println(new String(buf));
        }
    
        public static void demo_write() throws IOException {
            //1、创建字节流输出对象,用于操作文件
            FileOutputStream fs1 = new FileOutputStream("bytedemo.txt");
            //2、写数据。将字符串转成字节,另外字节是直接写入,不用flush;
            fs1.write("sbcxre".getBytes());
            fs1.close();//关闭资源动作要完成。 缓冲区对象要用到flush;
        }
    
    }
    package IO字节流;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class CopyTest {
    
        public static void main(String[] args) throws IOException {
            copy_demo1();
            copy_demo2(); 
            copy_demo3(); 
            copy_demo4(); 
              
        }
    
        public static void copy_demo4()throws IOException {
           FileInputStream fi1 = new FileInputStream("bytedemo.txt");
           BufferedInputStream bfi1 = new BufferedInputStream(fi1);
           FileOutputStream fo1 = new FileOutputStream("butedemo.txt");
           BufferedOutputStream bfo1= new BufferedOutputStream(fo1);
           byte[]buf = new byte[fi1.available()];//有局限性,文件过大创建数组都需要很长时间;不建议使用
           bfi1.read(buf);
           bfo1.write(buf);
           bfo1.close();
           bfi1.close();
          
        }
    
        public static void copy_demo3()throws IOException {
            FileInputStream fi1 = new FileInputStream("bytedemo.txt");
             BufferedInputStream bfi1 = new BufferedInputStream(fi1);
            FileOutputStream fo1 = new FileOutputStream("butedemo.txt");
            BufferedOutputStream bfo1= new BufferedOutputStream(fo1);
            int ch=0;
         while((ch=bfi1.read())!=-1){
                  bfo1.write(ch);
                  bfo1.flush();//缓冲区必须使用flush ,每个都刷新所以效率很慢;
            }
            bfo1.close();
            bfi1.close();
        }
    
        public static void copy_demo2() throws IOException {
             FileInputStream fi1 = new FileInputStream("bytedemo.txt");
             BufferedInputStream bfi1 = new BufferedInputStream(fi1);
             FileOutputStream fo1 = new FileOutputStream("butedemo.txt");
             BufferedOutputStream bfo1= new BufferedOutputStream(fo1);
             int len=0;
             byte[]buf = new byte[1024];
             while((len=bfi1.read(buf))!=-1){
                   bfo1.write(buf,0,len);
                   bfo1.flush();//缓冲区必须使用flush
             }
             bfo1.close();
             bfi1.close();
        }
    
        public static void copy_demo1() throws IOException {
             FileInputStream fi1 = new FileInputStream("bytedemo.txt");
             FileOutputStream fo1 = new FileOutputStream("butedemo.txt");
             int len=0;
             byte[]buf = new byte[1024];
             while((len=fi1.read(buf))!=-1){
                 fo1.write(buf,0,len);
             }
             fi1.close();
             fo1.close();
        }
    
    }
  • 相关阅读:
    Exception in thread "main" java.util.MissingFormatArgumentException: Format specifier 's'
    抓报错SQL
    10.3.4 direct path read and direct path read temp
    武道与健身——北漂18年(80)
    jquery选择器 之 获取父级元素、同级元素、子元素
    JQuery Show()的几种效果 总有一种是你需要的
    Add method not implemented
    MySQL server version for the right syntax to use near 'info where info.stu_id = 1' at line 1
    Mapped Statements collection does not contain value for WaitMissionMapper.updateWait
    Cause: org.xml.sax.SAXParseException; lineNumber: 32; columnNumber: 14; 注释中不允许出现字符串 "--"
  • 原文地址:https://www.cnblogs.com/wangyinxu/p/6859310.html
Copyright © 2011-2022 走看看