20-io流(二),对象流,转换流

20-io流,对象输入输出流,

  • Object:

    • 以对象的形式进行读取和写出

    注意事项:

    ​ 1.写对象到文件叫做序列化,所有需要序列化的都必须实现Serializable接口(可以让User对象具备以对象方式写入文件的能力)

    ​ 2.实现Serializable接口之后要设置一个序列化的编号,给类一个标记

    ​ 3.序列化只能对堆中的进行序列化,不能对方法区中的进行序列化

    ​ 4.不需要序列化的加transient关键字

import java.io.Serializable;

public class User implements Serializable{
	private static final long serialVersionUID = 1L;
	private String uname;	
	private transient String pwd;
	private int age;
	private String id;
	//无参构造方法
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	//重载有参构造
	public User(String uname, String pwd, int age) {
		super();
		this.uname = uname;
		this.pwd = pwd;
		this.age = age;
	}
	//set,get属性方法
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	//重写toString方法,方便打印
	public String toString() {
		return "User [uname=" + uname + ", pswd=" + pwd + ", age=" + age + "]";
	}

}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class ObjectDemo {
	public static void main(String[] args) throws IOException, ClassNotFoundException {
		//创建User对象
		User user = new User("梁国东", "12345", 18);
		User user1 = new User("乌龟", "12345", 18);
		User user2 = new User("可乐", "12345", 18);
		
		//[1]创建文件对象
		FileOutputStream fos = new FileOutputStream("F:\\text.txt");
		//[2]创建对象输出流对象
		ObjectOutputStream oos = new ObjectOutputStream(fos);
		//[3]写对象到文件中去    --->序列化
		oos.writeObject(user);
		oos.writeObject(user1);
		oos.writeObject(user2);
		//[4]关闭流
		oos.close();
		fos.close();
		System.out.println("写入成功!");
		
		System.out.println("======================");
		
		//[1]创建文件输入对象
		FileInputStream in = new FileInputStream("F:\\text.txt");
		//[2]创建对象输入对象流
		ObjectInputStream ois = new ObjectInputStream(in);
		//[3]从文件中读取对象  --->反序列化
		User u = (User)ois.readObject();
		User u1 = (User)ois.readObject();
		User u2 = (User)ois.readObject();
		
		System.out.println(u);
		System.out.println(u1);
		System.out.println(u2);
		//关流
		ois.close();
		in.close();
	}
}
  • 输出流:
    • PrintWriter: 按字符进行输出
    • PrintStream: 按字节进行输出
import java.io.PrintStream;
import java.io.PrintWriter;

public class PrintDemo {
	public static void main(String[] args) {
		//[1]创建对象
		PrintWriter pw = new PrintWriter(System.out);
		PrintStream ps = new PrintStream(System.out);
		//[2]输出
		pw.println("你好啊");
		pw.print("我不好");
		pw.println(12);
		pw.print("a");
		ps.println("fdsfsdfgs");
		//[3]关闭
		pw.close();
		ps.close();
	}
}
  • 标准输入流:
  • 标准输出流:
    • System.out
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.Scanner;

public class SystemDemo {
	public static void main(String[] args) throws IOException {
		Scanner input = new Scanner(System.in);
		
		//[1]创建文件对象
		//FileInputStream fis = new FileInputStream("F:\\text.txt");
		//FileOutputStream fos = new FileOutputStream("F:\\text.txt");
		//[2]创建转换流对象
		Writer w = new OutputStreamWriter(System.out,"utf-8");
		Reader r = new InputStreamReader(System.in, "utf-8");
		
		//[3]缓冲区
		BufferedWriter bw = new BufferedWriter(w);
		BufferedReader br = new BufferedReader(r);
		
		//[4]读取数据
		String line = br.readLine();				//读取数据
		while(line!=null) {
			if(line.equals("88")) {
				break;
			}
			bw.write(line);
			line = br.readLine();	//接着读取
			bw.flush();
		}
		
		//[5]关闭
		br.close();
	}
}
  • url: 统一资源定位符
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;

public class URLdemo {
	public static void main(String[] args) throws IOException {
		//[1]创建统一资源定位符对象
		URL url = new URL("http://www.baidu.com");
		//[2]从网上得到网页信息
		InputStream is = url.openStream();
		//[3]将字节转为字符
		Reader r = new InputStreamReader(is,"utf-8");
		//[4]将数据读取到缓冲区
		BufferedReader br = new BufferedReader(r);
		//[5]显示读取的信息
		String line;
		while((line = br.readLine()) != null) {
			System.out.println(line);
		}
		//[6]关闭
		br.close();
		r.close();
		is.close();
	}
}
  • Reader: 读取字符文件
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class ReaderDemo1 {
	public static void main(String[] args) throws IOException {
		//创建文件读取对象
		Reader r =new FileReader("f:\\text.txt");
		
		//使用Read()方法读取,每个读一个字符
		char[] ch = new char[1024];
		//声明一个变量,存储读取的一个字符,读取的字符放在 , 用于读取的数据的个数  ,当没有数据的时候然后-1
		int c = r.read();
		StringBuilder s = new StringBuilder();
		while(c!=-1) {
			s.append(ch);
			c=r.read();
		}
		r.close();
		System.out.println(s);
	}
}
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;

public class ReaderDemo2 {
	public static void main(String[] args) throws IOException {
		//[1]创建文件流对象
		FileInputStream fis = new FileInputStream("f:\\text.txt");
		//[2]将字节流转为字符流
		Reader r = new InputStreamReader(fis, "utf-8");
		//[3]字符流读取的缓冲区
		BufferedReader br = new BufferedReader(r);
		//[4]声明变量存储接收到的缓冲区取来的数据
		String line;
		//[5]循环读取
		while((line = br.readLine()) != null) {			//一次读一行
			System.out.println(line);
		}
		//[6]关闭流
		br.close();
		r.close();
		fis.close();
	}
}
  • Writer : 写入文件
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class WriterDemo {
	public static void main(String[] args) throws IOException {
		//[1]创建文件对象
		//FileOutputStream fos = new FileOutputStream("F:\\text.txt");
		//[2]创建字节流和字符流的转换
		//Writer w = new OutputStreamWriter(fos,"utf-8");
		//[3]创建缓冲区
		//BufferedWriter bw = new BufferedWriter(w);
		//上面代码写成一行
		BufferedWriter bw  = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("F:\\text.txt",true),"utf-8"));
		
		bw.write("我是你爸阿爸");
		bw.write("\r\n呵呵~~~");
		//[5]关闭
		bw.close();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值