专栏首页python3Java IO学习笔记+代码(3)

Java IO学习笔记+代码(3)

字符流处理 /*  * ProcesserCharacterStream.java  *  * Created on 2006年8月23日, 上午8:02  *  * 字符流处理  *  * java.io包中加入了专门用于字符流处理的类,这些类都是Reader和Writer类的子类,  * Reader和Writer是两个抽象类,只提供了一系列用于字符流处理的接口,不能生成这  * 两个类的实例。  * java.io包中用于字符流处理的最基本的类是InputStreamReader和OutputStreamWriter,  * 用来在字节流和字符流之间作为中介。  *  * 下面是InputStreamReader类和OutputStreamWriter类的常用方法:  * * public InputStreamReader(InputStream in)  * 根据当前平台缺省的编码规范,基于字节流in生成一个输入字符流。 * public InputStreamReader(InputStream in, String sysCode)throws UnSupportedEncodingException  * 按照参数sysCode指定的编码规范,基于字节流in构造输入字符流,如果不支持参数sysCode中指定的编码规范,就会产生异常。 * public OutputStreamWriter(OutputStream out)  * 根据当前平台缺省的编码规范,基于字节流out生成一个输入字符流。 * public OutputStreamWriter(OutputStream out, String sysCode) throws UnsupportedEncodingException  * 按照参数sysCode指定的编码规范,基于字节流out构造输入字符流,如果不支持参数sysCode中指定的编码规范,就会产生异常。 * public String getEncoding()  * 获得当前字符流使用的编码方式。 * public void close() throws IOException  * 用于关闭流。 * public int read() throws IOException  * 用于读取一个字符。 * public int read(char[] cbuf, int off, int len)  * 用于读取len个字符到数组cbuf的索引off处。 * public void write(char[] cbuf, int off, int len) throws IOException  * 将字符数组cbuf中从索引off处开始的len个字符写入输出流。 * public void write(int c) throws IOException  * 将单个字符写入输入流。 * public void write(String str, int off, int len) throws IOException  * 将字符串str中从索引off位置开始的ltn个字符写入输出流。  *  * 此外,为了提高字符流处理的效率,在Java语言中,引入了BufferedReader和BufferWriter类,这两个类对字符流进行块处理。  * 两个类的常用方法如下:  * public BufferedReader(Reader in)  * 用于基于普通字符输入流in生成相应的缓冲流。  * public BufferedReader(Reader in, int bufSize)  * 用于基于普通字符输入流in生成相应的缓冲流,缓冲区大小为参数bufSize指定。  * public BufferedWriter(Writer out)  * 用于基于普通字符输入流out生成相应的缓冲流。  * public BufferedWriter(Writer out, int bufSize)  * 用于基于普通字符输入流out生在相应缓冲流,缓冲流大小为参数bufSize指定。  * public String readLine() throws IOException  * 用于从输入流中读取一行字符。  * public void newLine() throws IOException  * 用于向字符输入流中写入一行结束标记,值得注意的是,该标记不是简单的换行符"\n",而是系统定义的属性line.separator。  */ package study.iostudy; import java.io.*; public class ProcesserCharacterStream {     public static void main(String[] args)             throws FileNotFoundException, IOException     {         String lineStr;         FileInputStream fileInStream;         InputStreamReader inputReader;         BufferedReader bufReader;         FileOutputStream fileOutStream;         OutputStreamWriter outputWriter;         BufferedWriter bufWriter;         fileInStream = new FileInputStream("d:\\mydir\\secondFile.txt");         inputReader = new InputStreamReader(fileInStream);         bufReader = new BufferedReader(inputReader);         System.out.println("------------------------------------------------");         System.out.println("There are file content before modify:");         while ((lineStr = bufReader.readLine()) != null)             System.out.println(lineStr);         bufReader.close();         inputReader.close();         fileInStream.close();         fileOutStream = new FileOutputStream("d:\\mydir\\secondFile.txt");         outputWriter = new OutputStreamWriter(fileOutStream);         bufWriter = new BufferedWriter(outputWriter);         String newStr = new String("Modify the file ! \r\nThis is a nice thing. \r\nWe can write anything.");         bufWriter.write(newStr, 0, newStr.length());         System.out.println(newStr);         bufWriter.close();         outputWriter.close();         fileOutStream.close();         fileInStream = new FileInputStream("d:\\mydir\\secondFile.txt");         inputReader = new InputStreamReader(fileInStream);         bufReader = new BufferedReader(inputReader);         System.out.println("------------------------------------------------");         System.out.println("There are file content after modify:");         while ((lineStr = bufReader.readLine()) != null)             System.out.println(lineStr);         bufReader.close();         inputReader.close();         fileInStream.close();     } } 接收键盘输入数据 /*  * OutputKeyPress.java  *  * Created on 2006年8月23日, 上午9:27  *  * 接收键盘输入数据  */ package study.iostudy; import java.io.*; public class OutputKeyPress {     public static void main(String[] args)     {         System.out.println("This is a example about acceptance of keyboard.");         String tempStr = "0";         try         {             InputStreamReader inputReader;             BufferedReader bufReader;             inputReader = new InputStreamReader(System.in);             bufReader = new BufferedReader(inputReader);             tempStr = bufReader.readLine();             System.out.println("Input num is: " + tempStr);         }catch(IOException e)         {             e.printStackTrace();         }         int n = Integer.parseInt(tempStr);         int nultiNum = 1;         for (int i =1; i <= n; i++)         {             nultiNum *= i;         }         System.out.println("multiply of input number is: " + nultiNum);     }    } 过滤流 /*  * FilterStream.java  *  * Created on 2006年8月23日, 上午9:40  *  * 过滤流  *  * 过滤流在读/写数据的同时可以对数据进行处理,并提供了同步机制,  * 这样在同一时刻只有一个线程可以访问一个I/O流。在java.io包中,  * FilterInputStream和FilterOutputStream类是所有过滤输入流和  * 输出流的父类,它们是抽象类,本身不能生成任何实例,在这两上类  * 之下,分别实现了几物特殊的过滤输入流和输出流,利用这些特殊输  * 入流和输出流的实例可以进行流处理。  *  * 下面介绍几个过滤输入流和输出流的子类:  *  * BufferedInputStream 和 BufferedOutputStream  * 这两个类实现了带缓冲的过滤流,将任意的输入流和输出流绑定到缓  * 冲流上就会提高性能。  * 对于BufferedInputStream类,当系统读取数据时,数据按块读入缓  * 冲区,随后读操作直接访问缓冲区。使用BufferedOutputStream进行  * 输出时,数据首先写入缓冲区,当缓冲区满时,缓冲区中的数据写入  * 连接的输出流,BufferedOutputStream类提供的方法flush()可以强  * 制将缓冲区的内容全部写入输出流。  *  * DataInputStream 和 DataOutputStream  * 这两个类不仅能读写数据流,而且能读写各种各样的Java语言本身固  * 有的数据类型,如int、float等。  *  * PushbackInputStream  * PushbackInputStream类提供了方法将刚读过的字节退回到输入流中,  * 后面的内容就可以用到该字节。  */ package study.iostudy; import java.io.*; public class FilterStream {     public static void main(String[] args)     {         try         {             FileInputStream inStream;             FileOutputStream outStream;             BufferedInputStream bufInObj;             BufferedOutputStream bufOutObj;             DataInputStream dataInObj;             PushbackInputStream pushObj;             byte[] tempBuf = new byte[1024];             int copyLen;             inStream = new FileInputStream("d:\\mydir\\secondFile.txt");             outStream = new FileOutputStream("d:\\mydir\\thirdFile.txt");             bufInObj = new BufferedInputStream(inStream);             bufOutObj = new BufferedOutputStream(outStream);             dataInObj = new DataInputStream(inStream);             System.out.println(dataInObj.readBoolean());             while ((copyLen = bufInObj.read(tempBuf, 0, 1024)) != -1)             {                 String copyStr = new String(tempBuf);                 System.out.println(copyStr);                 bufOutObj.write(tempBuf, 0, copyLen);                 bufOutObj.flush();             }             int pushData;             byte[] pushByte = {'o', 'k'};             pushObj = new PushbackInputStream(                     new FileInputStream("d:\\mydir\\thirdFile.txt"), 1000);             while ((pushData = pushObj.read()) != -1)             {                 if (Character.isLetter((char)pushData))                 {                     System.out.print((char)pushData);                 }                 else                 {                     System.out.println();                     pushObj.unread(pushByte);                 }             }         }catch(FileNotFoundException e)         {             System.out.println("File not found or persission denied.");         }catch(IOException e)         {             System.out.println("error:" + e);         }     }     /*      * 在上面的程序中,我们首先声明了FileInputStream类对象inStream和      * FileOutputStream类的对象outStream,接着声明了BufferInputStream      * 类对象bufObj、BufferedOutputStream类对象bufOutObj、      * DataInputStream类对象dataInObj以及PushbackInputStream类对象pushObj,      * 在try代码块中对上面这些对象进行初始化,程序的目的是通过BufferedInputStream      * 类对象bufInObj和BufferedOutputStream类对象bufOutObj将secondFile.txt      * 文件中内容输出到屏幕,并将该文件的内容写入thirdFile.txt文件中,值得注意的是,      * 将secondFile.txt文件中的内容输出之前,程序中使用      * "System.out.println(dataInObj.readBoolean());" 语句根据readBoolean()结果      * 输出了true,而secondFile.txt文件开始内容为“Modify”,和一个字符为M,      * 因此输出的文件内容没有“M”字符,thirdFile.txt文件中也比secondFile.txt      * 文件少第一个字符“M”。随后,通过PushbackInputStream类对象pushObj读取      * thirdFile.txt文件中的内容,输出读到的字符,当读到的不是字符,输出回车,将字符      * 数组pushByte写回到thirdFile.txt文件中,也就是“ok”写回文件中。      */ } 顺序输入流 /*  * SequenceStream.java  *  * Created on 2006年8月23日, 上午10:55  *  * 顺序输入流  *  * java.io包中提供了SequenceInputStream类,用于将多个输入流顺序连接起来,  * 使它们看起来就像一个较长的流。  */ package study.iostudy; import java.io.*; public class SequenceStream {     public static void main(String[] args)     {         FileInputStream fileStream1, fileStream2;         try         {             String allStr;             fileStream1 = new FileInputStream("d:\\mydir\\secondFile.txt");             fileStream2 = new FileInputStream("d:\\mydir\\thirdFile.txt");             SequenceInputStream seqStream = new SequenceInputStream(                     fileStream1, fileStream2);             BufferedInputStream bufObj = new BufferedInputStream(seqStream);             byte[] bufByte = new byte[1024];             while (bufObj.read(bufByte, 0, 1024) != -1)             {                 String tempStr = new String(bufByte);                 System.out.println(tempStr);             }         }catch(FileNotFoundException e)         {             System.out.println("File not found or no permission.");         }catch(IOException e)         {             System.out.println("error:" + e);         }     } } 对象串行化 /*  * SerializableObject.java  *  * Created on 2006年8月23日, 上午11:26  *  * 对象串行化  *   对象通过写出描述自己状态的数值来记录自己,这个过程叫做对象串行化。对象的寿命通  * 常是随着生成该对象的程序的终止而终止,在有些情况下,需要将对象的状态保存下来,然后  * 在必要的时候将对象恢复,值得注意的是,如果变量是另一个对象的引用,则引用的对象也要  * 串行化,串行化是一个递归的过程,可能会涉及到一个复杂树结构的串行化,比如包括原有对  * 象,对象的对象等。  *   在java.io包中,接口Serializable是实现对象串行化的工具,只有实现了Serializable  * 的对象才可以被串行化。Serializable接口中没有任何的方法,当一个类声明实现Seriali-  * zable接口时,只是表明该类遵循串行化协议,而不需要实现任何特殊的方法。  *   在进行对象串行化时,需要注意将串行化的对象和输入、输出流联系起来,首先通过对  * 象输出流将对象状态保存下来,然后通过对象输入流将对象状态恢复。  */ package study.iostudy; import java.io.*; class Book implements Serializable {     String isbn;     String name;     int page;     String type;     public Book(String isbn, String name, int page, String type)     {         this.isbn = isbn;         this.name = name;         this.page = page;         this.type = type;     } } public class SerializableObject implements Serializable {     public static void main(String[] args)             throws IOException, ClassNotFoundException     {         Book bookObj = new Book("7-02-016450-1", "Java", 218, "programming");         FileOutputStream fileOStream = new FileOutputStream("temp.ser");         ObjectOutputStream objOutStream = new ObjectOutputStream(fileOStream);         try         {             objOutStream.writeObject(bookObj);             objOutStream.close();         }catch(IOException e)         {             e.printStackTrace();         }         bookObj = null;         FileInputStream fileInStream = new FileInputStream("temp.ser");         ObjectInputStream objInStream = new ObjectInputStream(fileInStream);         try         {             bookObj = (Book)objInStream.readObject();             objInStream.close();         }catch(IOException e)         {             e.printStackTrace();         }         System.out.println("------------------------------------------------");         System.out.println("There are information about book:");         System.out.println("ISBN Number: " + bookObj.isbn);         System.out.println("Book Name: " + bookObj.name);         System.out.println("Book Page: " + bookObj.page);         System.out.println("Book Type: " + bookObj.type);     } }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 算法题3

    py3study
  • Java和Python中的整除和求余运算

    System.out.println("5 / 3 = " + (5 / 3));

    py3study
  • org.apache.commons.l

    py3study
  • 08 - JavaSE之IO流

    JAVA流式输入输出原理:可以想象成一根管道怼到文件上,另一端是我们程序,然后流的输入输出都是按照程序本身作为第一人称说明的。比如 input,对于我们程序来说...

    Daotin
  • Java I/O流输入输出,序列化,NIO,NIO.2

    二十三年蝉
  • java_String类、StringBuilder类、Arrays类、Math类的使用

    java.lang.String 类代表字符串。Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例

    咕咕星
  • Java反射知识

    (2)Class类对象阶段:*.class字节码文件被类加载器加载进内存,并将其封装成Class对象(用于在内存中描述字节码文件),Class对象将原字节码文件...

    乐心湖
  • 27.反射,类加载器,设计模式,jdk新特性

    1:反射(理解) (1)类的加载及类加载器 类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行...

    Java帮帮
  • 看懂今天这个!你就是个真正的javaer!

    在过去的几天里,你已经学会了一些java的语言特性以及面向对象思想,今天猿人工厂君,要带你完成一个华丽的转身变成一个——

    山旮旯的胖子
  • 使用Java实现面向对象编程

    用户1112962

扫码关注云+社区

领取腾讯云代金券