黑马程序员----IO流(2)各种流实例 笔记


------- android培训java培训、期待与您交流! ----------


内存流:    

我的理解:内存流操作:先把数据写到内存中去,然后再从内存中读取出来!提升了性能!

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class ByteArrayDemo7 {
	public static void main(String[] args) throws IOException {
		String s = "java is a good language";
		ByteArrayOutputStream bos = new ByteArrayOutputStream();//输出流
		bos.write(s.getBytes());
		// 已经把信息写到了内存中

		byte[] bys = bos.toByteArray();// 得到真正的数据
		ByteArrayInputStream bis = new ByteArrayInputStream(bys);//输入流,需要源。
		byte[] b = new byte[1024];
		int len;
		while ((len = bis.read(b)) != -1) {
			String data = new String(b, 0, len);
			System.out.println(data);
		}
	}
}


package june6D;

import java.io.CharArrayReader;
import java.io.CharArrayWriter;

public class CharArrayDemo8 {

	public static void main(String[] args) throws Exception {
		// 用内存字符流先把数据保存到内存中,然后从内存中取出数据
		String s = "测试内存流";
		CharArrayWriter cw = new CharArrayWriter();
		cw.write(s);// 数据写到了内存中
		char[] ch = cw.toCharArray();
		CharArrayReader cr = new CharArrayReader(ch);
		char[] b = new char[1024];
		int len;
		while ((len = cr.read(b)) != -1) {
			String data = new String(b, 0, len);
			System.out.println(data);
		}
	}
}

打印流:

打印流有非常好的打印功能,可以打印任何的数据类型。如,整数,小数,字符串等。


import java.io.FileWriter;
import java.io.PrintStream;
import java.io.PrintWriter;

public class PrintDemo9 {
	public static void main(String[] args) throws Exception {

		PrintStream ps = new PrintStream("out.txt");
		// ps.write(12);
		ps.println(10086);
		ps.println(false);
		// ps.print();针对print而言,不可以出现这样的(无参)
		ps.println();// 此时就可以

		//备注:System.out.println();想当于ps = System.out;

		ps = System.out;
		ps.println("您好!");// 控制台操作,注意上一句
		// 字符打印流
		PrintWriter pr = new PrintWriter("out2.txt");
		// PrintWriter(OutputStream out, boolean autoFlush) 通过现有的 OutputStream,创建新的 PrintWriter。(构造方法)

		pr = new PrintWriter(new FileWriter("out2.txt"), true);// 自动刷新,否则的话需要关闭资源!
		// 与PrintStream不同,若PrintWriter使用了自动刷新方法,那么必须调用println,print,format这些方法的其中一个才可以实现操作
		pr.println("呼哈哈哈哈");
		pr.println(false);

		pr = new PrintWriter(System.out, true);// 打印在控制台上
		pr.println(false);
		pr.println("打印流990");
		pr.println(67463165);
		// pr.close();//因为使用了自动刷新。
	}
}
 


标准流

 

   标准输入流:  System.in   默认表示的是键盘录入

   标准输出流:  System.out  默认表示的是屏幕输出



import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintStream;

public class SyetemDemo {
	public static void main(String[] args) throws IOException {
		/**
		 *  标准流: 标准输入流: System.in 默认表示的是键盘录入 
标准输出流: System.out 默认表示的是屏幕输出
		 * 
		 * 若现在我输出不想打印在屏幕上,怎么办? 
		 * 若现在我不想通过键盘来录入数据,有怎么办?
		 * 
		 * 流的重定向: static void setOut(PrintStream out) 重新分配“标准”输出流。 static void
		 * setIn(InputStream in) 重新分配“标准”输入流。
		 */
		System.out.println("123456789");//最普通的打印
		System.err.println("123652");// 同样是一种输出流,打印出的是123652

		/**
		 * static void setOut(PrintStream out) 重新分配“标准”输出流。
		 */

		// 输出流就被重新定义到了文件,而不是屏幕
		System.setOut(new PrintStream("68Demo.txt"));// 只有在定义过后才生效,所以上面的还是会输出到控制台
		System.out.println("AAAA");
		System.out.println("BBBB");//就输出了在文件里

		int i = System.in.read();// 接受从键盘输入的数据,写在最前面(没有任何重新分配)才有效
		System.out.println("i所对应的是:" + (char) i);// 把它转换为字符型
		System.out.println(i);
		/**
		 * 重新分配,由标准键盘输入变为由文件输入
		 */
		System.setIn(new FileInputStream("copy6.4"));//备注:打印的是文件copy6.4中的数据,而且打印在文件68Demo.txt中。
		byte[] buff = new byte[1024];
		int len = 0;
		while ((len = System.in.read(buff)) != -1) {
			System.out.println(new String(buff, 0, len));// 此时不会打印在控制台上,因为上面已经重新定义了由打印到屏幕上转换为打印到文件里
		}
	}
}



Scanner(简单文本扫描器)

 

Scanner(File source) 构造一个新的 Scanner,它生成的值是从指定文件扫描的。

备注:实现了Iterable接口


import java.io.File;
import java.io.PrintStream;
import java.util.Scanner;

public class ScannerDemo18 {
	public static void main(String[] args) throws Exception {

		// 参照api
		Scanner sc = new Scanner(System.in);// 从键盘输入
		// int i = System.in.read();
		/*  连着进行了三次,没有完成的话不停止运行
			System.out.println(sc.next());                                                                                                                           			System.out.println(sc.next());
		 *  System.out.println(sc.next());
		 */
		System.setOut(new PrintStream("Scanner.txt"));// 流的重定向(打印到哪里)
		sc = new Scanner(new File("copy6.4"));// 扫描位置
		int line = 1;
		while (sc.hasNextLine()) {// 是否有下一行 //一行一行的读取,这样的话格式好看
			System.out.println(line + " " + sc.nextLine());// 读取下一行
			line++;
		}
	}
}


缓冲流


我的总结:在后续的学习中,缓冲流用到的会很多,因为效率高!


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

//用缓冲流,性能相对高些
public class BufferedInputStreamDemo22 {
	public static void main(String[] args) throws IOException {
		/*
		 * BufferedInputStream bis = new BufferedInputStream(new
		 * FileInputStream("68.txt")); BufferedOutputStream bos = new
		 * BufferedOutputStream(new FileOutputStream("buffer.txt"));
		 * 
		 * int len = 0; 
		 * while((len = bis.read()) != -1){ 
		 * bos.write(len); 
		 * }
		 * bos.close(); 
		 * bis.close();
		 */
		
		try (
BufferedReader br = new BufferedReader(new FileReader("68.txt"));
	BufferedWriter bw = new BufferedWriter(new FileWriter(
						"bufferWriter.txt"))) 
{//java7新特性,自动关闭资源
			String Line = null;
			while ((Line = br.readLine()) != null) {
				bw.write(Line);
				bw.newLine();//此时必须加上换行操作,注意这是个新用法(方法)
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

合并流(SequenceInputStream)


package june6D;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.SequenceInputStream;

//和并两个文件的合并流
public class SequenceInputStreamDemo24 {
	public static void main(String[] args) throws IOException {
		
		SequenceInputStream si = new SequenceInputStream(
				new FileInputStream("6.4"),
				new FileInputStream("hello.java"));
		
		OutputStream os = new FileOutputStream("sequence.txt");
		int len;
		byte []b = new byte[1024];
		while((len = si.read(b)) != -1){
			os.write(b, 0, len);
		}
	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值