1. 程式人生 > >java輸入輸出(6)退回輸入流

java輸入輸出(6)退回輸入流

  • java中可以把資料推回輸入流,使得資料可以再次被讀取,以下程式的功能為尋找指定字串“new PushBackReader”,當匹配不到指定字串的時候,將當前遍歷到的字串輸出,如果匹配到指定的字串,將其推回到輸入流,然後再次讀取輸出,具體的程式碼講解穿插在程式碼之中
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.PushbackReader;
    
    public class PushBackTest {
        public static void main(String args[]){
            try{
                PushbackReader pushBackReader = new PushbackReader(new FileReader("src//PushbackTest.java"),64);
    //            例項化一個PushbackReader物件,並指定推回緩衝區的長度為64
                {
                    char[]buf =new char[32];
                    String lastContent = "";
    //                lastContent為最新遍歷到字串
    
                    int hasReader = 0;
                    while((hasReader = pushBackReader.read(buf))>0){
    //                read方法在前面有講過,將輸入流的內容儲存到指定的陣列中,返回實際儲存的長度
    
                        String content = new String(buf, 0, hasReader);
    //                    將儲存的資料轉換為字串
    
                        int targetIndex = 0;
    //                    “目標下標”,下文將用這個作為旗幟來判斷是否遍歷到了目標字串
    
                        if((targetIndex = (lastContent + content).indexOf("new PushBackReader"))>0){
    //                        這個判斷條件就是看當前字串和上一個遍歷的字串是否包含目標字串
    
                            pushBackReader.unread((lastContent + content).toCharArray());
    //                        如果包含目標字串,將其推回到緩衝區中
    
                            int len = targetIndex > 32 ? 32 : targetIndex;
    
                            pushBackReader.read(buf, 0, len);
    //                         將推回到緩衝區的目標字串讀取出來
                            System.out.println(new String(buf, 0, len));
                            System.exit(0);
                        }
                        else {
                            System.out.println(lastContent);
                            lastContent = content;
                        }
                    }
                }
    
    
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    //程式輸出結果如下
    //        D:\JDK\bin\java.exe "-javaagent:D:\IntelliJ IDEA Community Edition 2018.2.2\lib\idea_rt.jar=53707:D:\IntelliJ IDEA Community Edition 2018.2.2\bin" -Dfile.encoding=UTF-8 -classpath D:\JDK\jre\lib\charsets.jar;D:\JDK\jre\lib\deploy.jar;D:\JDK\jre\lib\ext\access-bridge-64.jar;D:\JDK\jre\lib\ext\cldrdata.jar;D:\JDK\jre\lib\ext\dnsns.jar;D:\JDK\jre\lib\ext\jaccess.jar;D:\JDK\jre\lib\ext\jfxrt.jar;D:\JDK\jre\lib\ext\localedata.jar;D:\JDK\jre\lib\ext\nashorn.jar;D:\JDK\jre\lib\ext\sunec.jar;D:\JDK\jre\lib\ext\sunjce_provider.jar;D:\JDK\jre\lib\ext\sunmscapi.jar;D:\JDK\jre\lib\ext\sunpkcs11.jar;D:\JDK\jre\lib\ext\zipfs.jar;D:\JDK\jre\lib\javaws.jar;D:\JDK\jre\lib\jce.jar;D:\JDK\jre\lib\jfr.jar;D:\JDK\jre\lib\jfxswt.jar;D:\JDK\jre\lib\jsse.jar;D:\JDK\jre\lib\management-agent.jar;D:\JDK\jre\lib\plugin.jar;D:\JDK\jre\lib\resources.jar;D:\JDK\jre\lib\rt.jar;E:\JavaProject\FileOperatins\out\production\FileOperatins PushBackTest
    //
    //        import java.io.FileReader;
    //        impo
    //        rt java.io.IOException;
    //        import
    //        java.io.PushbackReader;
    //
    //        publi
    //        c class PushBackTest {
    //    publ
    //    ic static void main(String args[
    //                                ]){
    //        try{
    //            P
    //            ushbackReader pushBackReader = n
    //            ew PushbackReader(new FileReader
    //                    ("src//PushbackTest.java"),64);
    //
    ////            例項化一個PushbackRead
    //            er物件,並指定推回緩衝區的長度為64
    //
    //            {
    //                char[]buf =n
    //                ew char[32];
    //                St
    //                ring lastContent = "";
    ////      
    //                lastContent為最新遍歷到字串
    //
    //
    //                int hasReader
    //                        = 0;
    //                while((has
    //                Reader = pushBackReader.read(buf
    //                ))>0){
    ////                read方法
    //                在前面有講過,將輸入流的內容儲存到指定的陣列中,返回實際儲存的長
    //                        度
    //
    //                String
    //                        content = new String(buf, 0, has
    //                        Reader);
    ////                    
    //                將儲存的資料轉換為字串
    //
    //
    //                int targetIndex = 0;
    ////    
    //                “目標下標”,下文將用這個作為旗
    //                        幟來判斷是否遍歷到了目標字串
    //
    //
    //                if((targetIndex = (lastCo
    //                ntent + content).indexOf("
    //
    //                        Process finished with exit code 0