java从入门到弃坑第十四天

来源:互联网 发布:淘宝双收藏是什么意思 编辑:程序博客网 时间:2024/06/05 15:00

1.LineNumberReader:跟踪行号的字符缓冲输入流。

                    构造方法:LineNumberReader(Reader in):用默认输入缓冲区的大小创建行编号Reader。

                                      LineNumberReader(Reader in,int sz):创建行编号reader,给定缓冲区大小。

         成员方法:public int getLineNumber():获取行号

                                                         public void setLineNumber(int lineNumber):设置起始行号

                                      String readLine():读取一行

exp:读取文件,每次读取一行打印并且加上行号,要在根目录下先创建文件在读取

import java.io.FileReader;import java.io.IOException;import java.io.LineNumberReader;public class ReaderDemo {public static void main(String[] args) throws IOException {LineNumberReader lnr=new LineNumberReader(new FileReader("1.txt"));String s;//用字符串s接取读取的行字符。while((s=lnr.readLine())!=null){System.out.println(lnr.getLineNumber()+"  "+s);}}}

2.操作基本数据类型的流:DataInputStream:向文件中写入数据。

                                           DataOutputStream:从文件中读取数据。

 注:用该io流操作时读取数据顺序必须和写入时的一致,否则数据有问题。顺序不一致,

          报错:Exception in thread "main" java.io.EOFException。

3.内存操作流:解决临时数据储存的问题。

     操作字节数组:用InputStream或OutputStream。

     操作字符数组:用StringReader或StringWriter。将数据写到流中保存在内存,并且读取。

4.打印流:字节打印流:PrintStream,字符打印流:PrintWriter。

      特点:A:只能操作目的地,不能操作数据源。

                 B:可以操作任意类型的数据。

                 C:创建对象时可以启用自动刷新功能,但仅限于println、printf 或 format方法。

                 D:可以操作文件的流:其构造方法中同时有File和String类型的参数。

exp:利用字符打印流复制java文件(BufferedReader+PrintWriter),启动自动刷新。

import java.io.BufferedReader;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;public class CopyDemo1 {public static void main(String[] args) throws IOException {BufferedReader bw=new BufferedReader(new FileReader("1.java"));PrintWriter pw=new PrintWriter(new FileWriter("2.java"), true);String s;while((s=bw.readLine())!=null){pw.println(s);}bw.close();pw.close();}}

5.标准输入输出流:public static final InputStream in,public static final PrintStream out,这两个是System下的两个

                                成员变量,System.out是标准输出流,而println是操作字符流,所以在这之中用转换流对其操作

                                即为System.out.println();

6.合并流:SequenceInputStream类可以将多个输入流串流在一起,合并为一个输入流,因此,该流也被称为合并流

   构造放法:SequenceInputStream(InputStream s1, InputStream s2):将两个流合并成一个输入流,先s1,后s2

exp:

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.SequenceInputStream;//将1.java和2.java用一个合并输入流读取并复制到3.java中。public class CopyDemo2 {public static void main(String[] args) throws IOException {SequenceInputStream sis=new SequenceInputStream(new FileInputStream("1.java"), new FileInputStream("2.java"));FileOutputStream fo=new FileOutputStream("3.java");byte b[]=new byte[1024];//一次读取一个字节数组int len;//设定读取到的数组长度while((len=sis.read(b))!=-1){fo.write(b, 0, len);}sis.close();fo.close();}}

7.对象的序列化和反序列化

     ObjectOutputStream:序列化流,把对象按照流一样的方式写到文件或者在网络中传输,writeObject(Object obj)

     ObjectInputStream:反序列化流,把文件或者网络中的流对象数据还原对象,Object readObject()

     注:要让类实现序列化,必须先实现Serializable接口,不然会报错:java.io.NotSerializableException

exp:

import java.io.Serializable;public class Student implements Serializable {private String name;private int age;public Student() {super();// TODO Auto-generated constructor stub}public Student(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}}

测试类:

import java.io.EOFException;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class TestDemo {public static void main(String[] args) throws IOException, ClassNotFoundException {Student s1=new Student("a", 1);Student s2=new Student("b", 2);Student s3=new Student("c", 3);ObjectOutputStream ops=new ObjectOutputStream(new FileOutputStream("Student.txt"));ObjectInputStream ois=new ObjectInputStream(new FileInputStream("Student.txt"));ops.writeObject(s1);ops.writeObject(s2);ops.writeObject(s3);try {while(true){System.out.println(ois.readObject().toString());}} catch (EOFException e) {// TODO: handle exception//若用一般判断条件,则读完回报该异常,因此再此抓掉异常,遇到异常中断}ops.close();ois.close();}}

8.Properties:该类表示一个持久的属性集,其列表中每个键都对应一个字符串。

            特点:该类就是一个可以保存在流中或从流中加载的map集合。

     成员方法:A:添加元素,public Object setProperty(String key,String value)

                       B:获取元素,public String getProperty(String key)

                                               public Set<String> stringPropertyNames()

exp:把集合中的数据存储到文本文件中,并且是按照键值对形式存储的,然后改变一个键所对应的值。

import java.io.FileOutputStream;import java.io.IOException;import java.util.Properties;import java.util.Set;public class propDemo1 {public static void main(String[] args) throws IOException {Properties prop =new Properties();FileOutputStream fos=new FileOutputStream("1.txt");prop.setProperty("a", "1");prop.setProperty("b", "2");prop.setProperty("c", "3");Set<Object> key=prop.keySet();for (Object o : key) {if(o.equals("b")){prop.setProperty("b", "100");}}prop.store(fos, "null");fos.close();}}