天天看点

java标准输入输出流的概述

OutputStreamWriter的用法

需求:读取项目根目录下的(某个文件),并输出到命令行(三种方法)

public class OutputStreamWriterDemo {
	public static void main(String[] args) throws IOException {
	//高效
		// method01();
		// method02();
		// 创建输入流
		BufferedReader br = new BufferedReader(new FileReader("RecurrenceDemo.java"));
		// 创建输出流
		Writer w = new OutputStreamWriter(System.out);// 多态,父类型引用指向子类
		BufferedWriter bw=new BufferedWriter(w);
		String line;
		while ((line = br.readLine()) != null) {
			bw.write(line);
			bw.newLine();
		}
		// 关闭资源
		br.close();
		bw.close();
	}

	private static void method02() throws FileNotFoundException, IOException {
		// 创建输入流
		BufferedReader br = new BufferedReader(new FileReader("RecurrenceDemo.java"));
		// 创建输出流
		Writer w = new OutputStreamWriter(System.out);// 多态,父类型引用指向子类
		String line;
		while ((line = br.readLine()) != null) {
			w.write(line);
			w.write("\r\n");
		}
		// 关闭资源
		br.close();
		w.close();
	}

	private static void method01() throws FileNotFoundException, IOException {
		// 创建输入流
		BufferedReader br = new BufferedReader(new FileReader("RecurrenceDemo.java"));
		// 创建输出流
		OutputStream os = System.out;
		String line;
		while ((line = br.readLine()) != null) {
			os.write(line.getBytes());
			os.write("\r\n".getBytes());
		}
		// 关闭资源
		br.close();
		os.close();
	}

}
           

InputStreamReader用法

需求:读取键盘录入的数据,并输出到项目根目录下的a.txt文件中

public static void main(String[] args) 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();
		}
		//释放资源
		is.close();
		fw.close();
	}

           

转换流(两种方法)

public static void main(String[] args) throws IOException {
		// method01();
		// 创建输入流
		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();
		}
		// 释放资源
		is.close();
		fw.close();
	

	}

	private static void method01() throws IOException {
		// 创建输入流
		InputStream is = System.in;
		Reader r = new InputStreamReader(is);
		// 创建输出流
		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();
		}
		// 释放资源
		is.close();
		fw.close();
	}
           

打印流:

PrintStream

PrintWriter

可以自动换行,println()

不能输出字节,但可以输出其他任意类型

通过某些配置,可以实现自动刷新(只有在调用println、printf或format才有用)

可以把字节输出流转换成字符输出流

注意:只能输出不能输入

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

           

打印流的特有功能:

自动换行:使用方法println()实现自动换行

自动刷新:创建PrintWriter对象是启动自动刷新开关,并且使用println等3个方法可以实现自动刷新

注意:创建FileWriter对象时boolean参数是是否追加,而创建打印流对象boolean类型参数是是否自动刷新

public static void main(String[] args) throws IOException {
		// method01();
		// 创建打印流对象
		//PrintWriter pw = new PrintWriter("c.txt");
		PrintWriter pw = new PrintWriter(new FileWriter("d.txt",true),true);
		pw.println("hello");
		pw.println("world");
		pw.println("java");
		//释放资源
		pw.close();

	}

	private static void method01() throws FileNotFoundException {
		// 创建打印流对象
		PrintWriter pw = new PrintWriter("c.txt");
		pw.println("hello");
		pw.println("world");
		pw.println("java");
		// 释放资源
		pw.close();
	}
           

使用打印流复制文本文件

public static void main(String[] args) throws IOException {
		//创建输入流对象
		BufferedReader br=new BufferedReader(new FileReader("RecurrenceDemo.java"));
		//创建打印流对象
		PrintWriter pw=new PrintWriter(new FileWriter("g:\\RecurrenceDemo.java"),true);
		String line;
		while((line=br.readLine())!=null){
			pw.println(line);
		}
		//释放资源
		br.close();
		pw.close();
	}
           

对象操作流:可以读写任意类型的对象

对象输出流:ObjectInputStream

writeObject

ObjectInputStream(InputStream in)

对象输入流:ObjectOutPutStream

readObject

ObjectOutputStream(OutputStream out)

public static void main(String[] args) throws IOException, ClassNotFoundException {
		//method01();
		//创建对象输入流的对象
		ObjectInputStream ois=new ObjectInputStream(new FileInputStream("s.txt"));
		/*//读取对象
		Object obj = ois.readObject();
		System.out.println(obj);
		Object obj2 = ois.readObject();
		System.out.println(obj2);*/
		try {
			while(true){
			Object obj=ois.readObject();
			System.out.println(obj);
			}
		} catch (EOFException e) {
			System.out.println("读到了文件的末尾");
		}
	}

	private static void method01() throws IOException, FileNotFoundException {
		//创建对象输入流的对象
		ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("s.txt"));
		//创建学生对象
		Student s=new Student();
		s.setName("张三");
		s.setAge(18);
		Student s2=new Student();
		s2.setName("李四");
		s2.setAge(23);
		//写出学生对象
		oos.writeObject(s);
		oos.writeObject(s2);
		//释放资源
		oos.close();
	}
           

Properties:Properties类表示了一个持久的属性集,属性列表中每一个键及其对应值都是一个字符串

构造方法: Properties()

Properties:两种遍历方式

public static void main(String[] args) {
		//创建属性列表对象
		Properties prop=new Properties();
		//添加映射关系
		prop.put("itheima01", "张三");
		prop.put("itheima02", "李四");
		prop.put("itheima03", "王五");
		//遍历属性列表
		//获取所有的key,通过key获取value
		
		/*Set<Object> keySet = prop.keySet();
		for (Object object : keySet) {
			Object object2 = prop.get(object);
			System.out.println(object+"---"+object2);
		}*/
		//获取所有的结婚证对象
		Set<Entry<Object,Object>> entrySet = prop.entrySet();
		for (Entry<Object, Object> entry : entrySet) {
			Object key = entry.getKey();
			Object value = entry.getValue();
			System.out.println(key+"---"+value);
		}
		
	}

           

Properties和Io流结合的功能:

void list(PrintWriter out)

void load(Reader reader)

void store(Writer writer,String comments);

public static void main(String[] args) throws IOException {
		// method01();
		// method2();
		// 创建属性列表
		// 创建属性列表对象
		Properties prop = new Properties();
		// 添加映射关系
		prop.setProperty("heima001", "张三");
		prop.setProperty("heima002", "李四");
		prop.setProperty("heima003", "王五");
		//创建输出流对象
		FileWriter fw=new FileWriter("s.txt");
		prop.store(fw, null);
		//释放资源
		fw.close();
	}

	private static void method2() throws FileNotFoundException, IOException {
		// 创建属性列表对象
		Properties prop = new Properties();
		// 创建一个输入流对象
		FileReader fr = new FileReader("b.txt");
		prop.load(fr);
		// 释放资源
		fr.close();
		System.out.println(prop);
	}

	private static void method01() throws FileNotFoundException {
		// 创建属性列表对象
		Properties prop = new Properties();
		// 添加映射关系
		prop.setProperty("heima001", "张三");
		prop.setProperty("heima002", "李四");
		prop.setProperty("heima003", "王五");
		// 创建打印流对象
		PrintWriter out = new PrintWriter("b.txt");

		prop.list(out);
		// 释放资源
		out.close();
	}

           

继续阅读