- 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
java输入输出(6)退回输入流
最新推荐文章于 2022-07-27 11:35:40 发布