Java IO思维导图

来源:互联网 发布:sql server与access 编辑:程序博客网 时间:2024/06/05 02:10

这里写图片描述

对应的测试类

 public static void main(String[] args) {        String path = "D:" + File.separator + "data.txt";        File file = new File(path);        try(        FileReader fr = new FileReader(file);        // need add append args        FileWriter fw = new FileWriter(file, true);        BufferedReader reader = new BufferedReader(fr);        BufferedWriter writer = new BufferedWriter(fw)){            String data;            int count = 0;            for (int i = 0; i < 100; i++) {                writer.append(String.valueOf(i));                writer.flush();                writer.newLine();            }            while ((data = reader.readLine()) != null) {                System.out.println(++count + " : " + data);            }        } catch (FileNotFoundException e) {            System.out.println("file not Fund[" + e.getMessage() + "]");        } catch (IOException e) {            System.out.println("IOException [" + e.getMessage() + "]");        }    }    /**     *  StringReader ???  [A character stream whose source is a string.]     */    @Test    public void testStringReader(){        StringReader sr = new StringReader("asdasdasd");        int c;        try {            while((c = sr.read()) != -1){                System.out.println((char) c);            }        } catch (IOException e) {            System.out.println("IO Exception ");        }    }    @Test    public void testStringWriter() throws IOException {        StringWriter sw = new StringWriter(20);        char[] chars = {'a' , 'b' , 'c', 'a' , 'b' , 'c', 'a' , 'b' , 'c', 'a' , 'b' , 'c', 'a' , 'b' , 'c'};        // 这个offset 指的是 StringWriter的偏移量        sw.write(chars, 10, 3);        System.out.println(sw.toString());    }    /**     *  可以通过getLineNumber()  和 setLineNumber() 来控制读取     */    @Test    public void testLineNumberReader(){        String path = "D:" + File.separator + "data.txt";        File file = new File(path);        try(                FileReader fr = new FileReader(file);                // need add append args                FileWriter fw = new FileWriter(file, true);                BufferedReader reader = new BufferedReader(fr);                BufferedWriter writer = new BufferedWriter(fw);                LineNumberReader lnr = new LineNumberReader(reader)){            int data ;            lnr.setLineNumber(100);            while((data = lnr.read()) != -1){                System.out.println(lnr.getLineNumber());                //System.out.println((char)data);            }        } catch (FileNotFoundException e) {            System.out.println("file not Fund[" + e.getMessage() + "]");        } catch (IOException e) {            System.out.println("IOException [" + e.getMessage() + "]");        }    }

PipedRead PipedWriter测试

public class TestPipedWriterReader{    public static void main(String[] args) {        CountDownLatch cdl = new CountDownLatch(1);        WriteRunnable wr = new WriteRunnable(cdl);        ReadRunnable rr = new ReadRunnable(cdl);        try {            wr.getPipedWriter().connect(rr.getPipedReader());        } catch (IOException e) {            System.out.println("通道启动连接失败" + e.getMessage());        }        new Thread(wr).start();        new Thread(rr).start();    }    static class WriteRunnable implements Runnable {        private PipedWriter pipedWriter = new PipedWriter();        private CountDownLatch cb;        public WriteRunnable(CountDownLatch cb) {            this.cb = cb;        }        public PipedWriter getPipedWriter() {            return this.pipedWriter;        }        @Override        public void run() {            StringBuilder sb = new StringBuilder();            for (int i = 0; i < 102; i++) {                sb.append("0123456789");            }            try {                synchronized (this) {                    System.out.println("----------writer start------------");                    pipedWriter.write(sb.toString());                    System.out.println("----------writer end ------------");                    cb.countDown();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }    static class ReadRunnable implements Runnable {        private PipedReader pipedReader = new PipedReader();        private CountDownLatch cb;        public ReadRunnable(CountDownLatch cb) {            this.cb = cb;        }        public PipedReader getPipedReader() {            return pipedReader;        }        @Override        public void run() {            try {                readMessageOnce();            } catch (BrokenBarrierException | InterruptedException e) {                e.printStackTrace();            }        }        // 从“管道输入流”中读取1次数据        private void readMessageOnce() throws BrokenBarrierException, InterruptedException {            cb.await();            System.out.println("......Read start...");            boolean readabled = false;            // 虽然buf的大小是2048个字符,但最多只会从“管道输入流”中读取1024个字符。            // 因为,“管道输入流”的缓冲区大小默认只有1024个字符。            while (! readabled) {                try {                    if (pipedReader.ready()) {                        char[] buf = new char[1024];                        try {                            int len = pipedReader.read(buf);                            System.out.println(new String(buf, 0, len));                            pipedReader.close();                        } catch (IOException e) {                            e.printStackTrace();                        }                        readabled = true;                    }                } catch (IOException e) {                    System.out.println(e.getMessage());                }            }            System.out.println("......Read end...");        }    }}  
原创粉丝点击