java从入门到弃坑第十四天

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;
	}
	@Override
	public 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();
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值