A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

今日内容介绍
 标准输入流 & 转换流 & 打印流
 对象操作流
 Properties集合
第1章标准输入流 & 转换流 & 打印流
1.1标准输入输出流
  public static final InputStream in:标准输入流
  public static final PrintStream out:标准输出流
[AppleScript] 纯文本查看 复制代码
 package com.itheima_05;
/*
 * 标准输入输出流:
		public static final InputStream in:字节输入流,用来读取键盘录入的数据
			public static final int x;
			InputStream is = System.in;
			Scanner sc = new Scanner(System.in);
		public static final PrintStream out:字节输出流,将数据输出到命令行
			System.out.println();
 */	
public class SystemInOutDemo {
	
}

1.2转换流
1.2.1OutputStreamWriter:将字节输出流转换为字符输出流
1.2.1.1案例代码一:
[AppleScript] 纯文本查看 复制代码
   package com.itheima_05;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

/*
 * 需求:读取项目根目录下的SystemInOutDemo.java,并输出到命令行
 * 
 * 数据源:项目根目录下的SystemInOutDemo.java	BufferedReader
 * 目的地:命令行	System.out
 * 
 * 
 * 由于标准输出流是一个字节输出流,所以只能输出字节或者字节数组,但是我们读取到的数据则是字符串,如果想进行输出还需要转换成字节数组
 * 我们要想通过标准输出流输出字符串,把标准输出流转换成一种字符输出流即可,OutputStreamWriter
 * 
 * OutputStreamWriter(OutputStream out) :转换流,把字节输出流转换成字符输出流
 * 
 * 
 */
public class OutputStreamWriterDemo {
	public static void main(String[] args) throws IOException   {
		//method2();
		
		//创建输入流对象
		BufferedReader br = new BufferedReader(new FileReader("SystemInOutDemo.java"));
		//创建输出流对象
		//OutputStream os = System.out;
		//Writer w = new OutputStreamWriter(System.out);//多态,父类型引用指向子类对象
		//BufferedWriter bw = new BufferedWriter(w);
		
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		
		//进行数据的读写
		String line;//用于存储读取到的数据
		while((line = br.readLine()) != null) {
			bw.write(line);
			bw.newLine();
		}
		
	
		
		//释放资源
		bw.close();
		br.close();
		
		
	}

	private static void method2() throws FileNotFoundException, IOException {
		//创建输入流对象
		BufferedReader br = new BufferedReader(new FileReader("SystemInOutDemo.java"));
		//创建输出流对象
		//OutputStream os = System.out;
		Writer w = new OutputStreamWriter(System.out);//多态,父类型引用指向子类对象
		
		//进行数据的读写
		String line;//用于存储读取到的数据
		while((line = br.readLine()) != null) {
			w.write(line);
			w.write("\r\n");
		}
		
	
		
		//释放资源
		w.close();
		br.close();
	}

	private static void method() throws FileNotFoundException, IOException {
		//创建输入流对象
		BufferedReader br = new BufferedReader(new FileReader("SystemInOutDemo.java"));
		//创建输出流对象
		OutputStream os = System.out;
		
		String line;//用于存储读取到的数据
		while((line = br.readLine()) != null) {
			os.write(line.getBytes());
			os.write("\r\n".getBytes());
		}
		
		//释放资源
		os.close();
		br.close();
	}
}

1.2.2InputStreamReader:将字节输入流转换为字符输入流
1.2.2.1案例代码二:
[AppleScript] 纯文本查看 复制代码
package com.itheima_05;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;

/*
 * 需求:读取键盘录入的数据,并输出到项目根目录下的a.txt文件中
 * 
 * 数据源:读取键盘录入的数据	System.in
 * 目的地:项目根目录下的a.txt	FileWriter
 * 
 * 
 * 
 * 转换流:需要把字节输入流转换成字符输入流,InputStreamReader
 * InputStreamReader(InputStream in) 
 */
public class InputStreamReaderDemo {
	public static void main(String[] args) throws IOException  {
		//创建输入流对象
		InputStream is = System.in;
		Reader r = new InputStreamReader(is);
		//创建输出流对象
		FileWriter fw = new FileWriter("a.txt");
		
		//读写数据
		char[] chs = new char[1024];
		int len;
		while((len = r.read(chs)) != -1) {
			fw.write(chs,0,len);
			fw.flush();
		}
		
		
		//释放资源
		fw.close();
		is.close();
		
	}

	private static void method() throws IOException {
		//创建输入流对象
		InputStream is = System.in;
		//创建输出流对象
		FileWriter fw = new FileWriter("a.txt");
		
		//读写数据
		byte[] bys = new byte[1024];
		int len;//用于存储读取到的字节个数
		while((len = is.read(bys)) != -1) {
			fw.write(new String(bys,0,len));
			fw.flush();
		}
		
		
		//释放资源
		fw.close();
		is.close();
	}
}

1.3打印流
打印流添加输出数据的功能,使它们能够方便地打印各种数据值表示形式.
字符打印流        PrintWriter
void print(String str): 输出任意类型的数据,
void println(String str): 输出任意类型的数据,自动写入换行操作
1.3.1案例代码三:
[AppleScript] 纯文本查看 复制代码
package com.itheima_06;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;

/*
 * 打印流:
 * 		PrintStream
 * 		PrintWriter
 * 			可以自动换行,println()
 * 			不能输出字节,但是可以输出其他任意类型
 * 			通过某些配置,可以实现自动刷新(只有在调用 println、printf 或 format才有用)
 * 			也是包装流,不具备写出功能
 * 			可以把字节输出流转换成字符输出流
 * 
 * 注意:只能输出不能输入
 * 
 *  
 */
public class PrintWriterDemo {
	public static void main(String[] args) throws IOException  {
		//创建打印流对象
		PrintWriter pw = new PrintWriter("b.txt");
		
		//写出数据
		pw.write("hello");
		pw.write("world");
		pw.write("java");
		
		//释放资源
		pw.close();
	}
}

1.3.3案例代码五:
  利用打印流将根目录下的SystemInOutDemo.java复制到d:\\SystemInOutDemo.java下
[AppleScript] 纯文本查看 复制代码
package com.itheima_06;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

/*
 * 使用打印流复制文本文件
 * 
 * 数据源	SystemInOutDemo.java	BufferedReader
 * 目的地	d:\\SystemInOutDemo.java	PrintWriter
 * 
 */
public class PrintWriterDemo3 {
	public static void main(String[] args) throws IOException  {
		//创建输入流对象
		BufferedReader br = new BufferedReader(new FileReader("SystemInOutDemo.java"));
		//创建打印流对象
		PrintWriter pw = new PrintWriter(new FileWriter("d:\\SystemInOutDemo.java"),true);
		
		String line;//用于存储读取到的每行数据
		while((line = br.readLine()) != null) {
			pw.println(line);
		}
		
		//释放资源
		pw.close();
		br.close();
	}

}

第2章对象操作流
                           
2.1概述
用于从流中读取对象的
ObjectInputStream 称为 反序列化流,利用输入流从文件中读取对象
ObjectOutputStream 称为 序列化流,利用输出流向文件中写入对象
特点:用于操作对象。可以将对象写入到文件中,也可以从文件中读取对象。
[AppleScript] 纯文本查看 复制代码
package com.itheima_07;
/*	
 * 对象操作流:可以用于读写任意类型的对象
 * 		ObjectOutputStream
 * 				writeObject 
 * 				ObjectOutputStream(OutputStream out) 
 * 		ObjectInputStream
 * 				readObject
 * 				ObjectInputStream(InputStream in)
 * 
 * 注意:
 * 		使用对象输出流写出对象,只能使用对象输入流来读取对象
 * 		只能将支持 java.io.Serializable 接口的对象写入流中
 * 
 */
public class ObjectOutputStreamDemo2 {
	public static void main(String[] args)  {
		
	}

}

2.2利用序列化流读写对象
[AppleScript] 纯文本查看 复制代码
package com.itheima_07;

import java.io.Serializable;

public class Student implements Serializable {
	

	/**
	 * 
	 */
	String name;
	int age;

	
	public Student(String name,int age) {
		this.name = name;
		this.age = age;
	}


	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age +"]";
	}
}

package com.itheima_07;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/*	
 * 使用对象输出流和读对象输入流写对象
 * Exception in thread "main" java.io.NotSerializableException: com.itheima_07.Student
 * Serializable:序列号,是一个标识接口,只起标识作用,没有方法
 * 				当一个类的对象需要IO流进行读写的时候,这个类必须实现该接口
 * 
 * Exception in thread "main" java.io.EOFException:当输入过程中意外到达文件或流的末尾时,抛出此异常。
 * 
 */
public class ObjectOutputStreamDemo {
	public static void main(String[] args) throws IOException, ClassNotFoundException  {
		//method();
		//创建对象输入流的对象
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt"));
		//读取对象
		/*Object obj = ois.readObject();
		System.out.println(obj);
		
		Object obj2 = ois.readObject();
		System.out.println(obj2);
		
		Object obj3 = ois.readObject();
		System.out.println(obj3);*/
		
		try {
			while(true) {
				Object obj = ois.readObject();
				System.out.println(obj);
			}
		} catch(EOFException e) {
			System.out.println("读到了文件的末尾");
		}
		
		//释放资源
		ois.close();
	}

	private static void method() throws IOException, FileNotFoundException {
		//创建对象输出流的对象
		//FileOutputStream fos = new FileOutputStream("a.txt");
		//ObjectOutputStream oos = new ObjectOutputStream(fos);
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.txt"));
		
		//创建学生对象
		Student s = new Student("zhangsan",18);
		Student s2 = new Student("lisi",19);
		//写出学生对象
		oos.writeObject(s);
		oos.writeObject(s2);
		
		//释放资源
		oos.close();
	}

}

2.2.1案例代码六:
[AppleScript] 纯文本查看 复制代码
package com.itheima_02;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/*
 * 使用字符流复制文本文件
 * 
 * 数据源		IODemo.java
 * 目的地		d:\\IODemo.java

 * 	
 */
public class FileCopyDemo {
	public static void main(String[] args) throws IOException  {
		//创建字符输入流对象
		FileReader fr = new FileReader("IODemo.java");
		//创建字符输出流对象
		FileWriter fw = new FileWriter("d:\\IODemo.java");
		
		//一次读写一个字符
		
		/*int ch;
		while((ch = fr.read()) != -1) {
			fw.write(ch);
			fw.flush();
		}*/
		
		//一次读写一个字符数组
		int len;//用于存储读到的字符个数
		char[] chs = new char[1024];
		while((len = fr.read(chs)) != -1) {
			fw.write(chs,0,len);
			fw.flush();
		}
		
		//释放资源
		fw.close();
		fr.close();
	}
}

2.3解决对象输入流读取对象出现异常的问题
2.3.1案例代码七:
[AppleScript] 纯文本查看 复制代码
package com.itheima_07;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

/*
 * 解决对象输入流读取对象出现异常的问题
 * 
 */
public class ObjectOutputStreamDemo3 {
	public static void main(String[] args) throws IOException, ClassNotFoundException   {
		//method();
		
		//创建对象输入流的对象
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream("b.txt"));
		//读取数据
		Object obj = ois.readObject(); 
		//System.out.println(obj);
		
		//向下转型,获取具体的子类对象
		ArrayList<Student> list = (ArrayList<Student>) obj;
		for (Student student : list) {
			System.out.println(student);
		}
		
		//释放资源
		ois.close();
	}

	private static void method() throws IOException, FileNotFoundException {
		//创建对象输出流的对象
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("b.txt"));
		//创建集合对象
		ArrayList<Student> list = new ArrayList<Student>();
		//添加学生对象
		list.add(new Student("wangwu",30));
		list.add(new Student("zhaoliu",28));
		//写出集合对象
		oos.writeObject(list);
		
		//释放资源
		oos.close();
	}
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马