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