黑马程序员--IO流(三)

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


一    打印流

打印流 --PrintStream字节打印流 ,PrintWriter字符打印流
打印流 --顾名思义用来进行打印操作的。是整个IO包中输出信息最方便的类,可以打印任何数据类型它在构造方法中接受         OutputStream及子类.打印流中提供了多种数据类型的print();println()打印方法。打印流本身是不会报异常的。


打印流体现了装饰设计模式---
打印流可直接接受OutputStream的实例,因为它与OutputStream相比可以更方便的输出数据。
相当于将OutputStream类的输出方法进行包装优化--此种设计叫装饰模式设计


在JDK1.5以后java新增了打印流的格式化打印才输出方式,提供了printf()方法进行格式话输出

下面来看看打印流的基本使用,代码如下:

public class StreamDemo3 {

	public static void main(String[] args) throws IOException {
		printStreamT();
	}

	/**
	*打印流打印数据
	*/
	public static  void printStreamT(){
		PrintStream  ps =null;   //创建打印流对象
		try {
			//实例化对象,指定操作文件
			ps  =new PrintStream(new FileOutputStream("aa.txt"));
			//打印数据
			ps.print("好好学习");
			ps.println("Hellow  Java");
			ps.println(1+1);
			
			//格式化打印数据
			String s ="黑马";   int a =10;  double f = 1.3;  char b = 'Z';
			//     %s  %d   %lf  %c  分别表示内容为字符串,整型,浮点型,字符型
			ps.printf("字符串:%s;整数:%d;小数:%lf;字符型:%c", s,a,f,b);
			ps.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


二    管道流 --线程通讯流
用来进行2个线程间的通讯PipedInputStream管道输入流,PipedOutputStream管道输出流。管道流可以直接进行连接--y.connect(x)连接管道,通过线程使用。下面来看看具体代码:
public class StreamDemo3 {

	public static void main(String[] args) throws IOException {
		PipedInputStream pis = new PipedInputStream();  //创建管道输入流和管道输出流
		PipedOutputStream pos =new PipedOutputStream();
		read read =new read(pis);
		write write =new write(pos);
		pis.connect(pos);   //必须连接管道
		//分别创建线程
		Thread t1 =new Thread(read);    
		Thread t2 =new Thread(write);  
		t1.start();
		t2.start();
	}
}

//实现Runnable的的写入数据类,管道输出流
class write implements Runnable{
	private PipedOutputStream pos;
	public write(PipedOutputStream p){
		this.pos =p;
	}

	@Override
	public void run() {
		try {
			//方便看到输出效果
			System.out.println("写入数据--请等待5s");
			Thread.sleep(5000);
			pos.write("管道流写入数据".getBytes());  //写入数据
			pos.close();   //关闭流
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


//实现Runnable的读取数据类,管道输入流
class read implements Runnable{
	private PipedInputStream  pis;
	public read(PipedInputStream p){
		this.pis =p;
	}

	@Override
	public void run() {
		//定义字节数组,接受读取到的数据,将之再打印出来
		byte [] by  =new byte[1024];
		int len;
		try {
			System.out.println("读取数据前");
			while ((len=pis.read(by))!=-1) {
				System.out.println(new String(by,0,len));
			}
		pis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

三   Properties----   是hashTable的子类

是一个集合与IO技术相结合的集合容器。具备Map集合的特点,存储的信息都是以键值对存在的字符串数据。

        常用于存储配置文件信息。

下面看下具体使用代码

public class StreamDemo3 {

	public static void main(String[] args) throws IOException {
		propertiesT();
		propertiesSave();
	}

    //Properties读取和存储数据
	public  static  void  propertiesT() {
		Properties p =new Properties();   //创建Properties对象
		//存储数据的方法  setProperties(key,value),put(key,value)
		p.setProperty("zhy", "12");
		p.setProperty("time", "2014-6-7");
		p.put("th", "111");
		p.setProperty("zhy", "123");  //设置修改键对应的  值
//		p.put("zhy", 11);   当在  键中已有数据后,添加则覆盖已有数据
		System.out.println(p);
		//stringPropertyNames()--得到所有数据将之返回一个set集合
		Set<String > st = p.stringPropertyNames();
		for (String s : st) {
			//便利set 集合输出数据
			System.out.println(p.getProperty(s));  
		}
	}
	
	/**
	 *读取/修改 流中数据并保存
	 */
	public static void  propertiesSave(){
		try {
			FileInputStream fis =new FileInputStream("xx.txt");  //创建流对象关联文件
			Properties p =new Properties(); 
			//load()--将流中的数据加载到Properties集合中
			p.load(fis);   
			//修改键对应的 值
			p.setProperty("zhy", "new zhy");
			//如果要对xx.txt文件一个值进行修改,那么要操作的流对象要在p修改后的位置,
			//否则就是将xx.txt中的内容替换为了那修改的一个值
			FileOutputStream fos =new FileOutputStream("xx.txt");   
			//将p读取到的数据修改后在保存到文件
			p.store(fos, "这里要写的是指定的 注释信息");
			//list()---将列表输出到指定的打印流
			p.list(System.out);
			fos.close();   //关闭流
			fis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值