黑马程序员——IO流(Properties类)

Properties集合与IO流应用
本文介绍Java中Properties集合的特性及其与IO流结合的应用,包括如何存储与读取键值对配置信息,并展示了通过Properties对象加载流及打印集合内容的方法。

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

Properties是hashtable的子类。

具备map集合的特点。而且它里面存储的键值对都是字符串。

是集合中IO技术相结合的集合容器。

该对象的特点:可以用键值对形式的存放配置信息。

配置信息存储在文本文件中。

程序演示:

如何将流中的数据存储到集合中。

想要将info.txt中的键值数据存到集合中进行操作。

思路:

1、用一个流和info.txt文件关联。

2、读取一行数据,将该行数据用“=”进行切割。

3、等号左边作为键,右边作为值。存入到Properties集合中即可。


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

/*
 	将键值对写入文件中,再从文件中读取键值对
 */

public class ReadFileKeyAndValue 
{

	public static void main(String[] args) 
	{
		Properties pro = new Properties();
		pro.setProperty("lisi1", "20");
		pro.setProperty("lisi2", "21");
		pro.setProperty("lisi3", "22");
		//将键值对写进文件中
		WriterPro("info.txt",pro);
		ShowFile("info.txt");
		Properties pro1 = new Properties();
		
		ReadPro("info.txt" , pro1);
		System.out.println(pro1);
	}
	public static void WriterPro(String str,Properties pro)
	{
		BufferedWriter bw = null;
		try {
			bw = new BufferedWriter(new FileWriter(str));
			for(String tmpstr : pro.stringPropertyNames())
			{
				bw.write(tmpstr+"="+pro.getProperty(tmpstr));
				bw.newLine();
			}
		} catch (IOException e) 
		{
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		finally
		{
			try {
				if(!bw.equals(null))
				bw.close();
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
	}
	public static void ReadPro(String str , Properties pro)
	{
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(str));
			String tmpstr = "";
			String[] arr = new String[2];
			while(!((tmpstr= br.readLine())==null))
			{
				arr = tmpstr.split("=");
				pro.setProperty(arr[0], arr[1]);
			}
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		finally
		{
			try {
				if(!br.equals(null))
				br.close();
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
		
	}
	public static void ShowFile(String str)
	{
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(str));
			String tmpstr = "";
			
			while(!((tmpstr=br.readLine())==null))
			{
				System.out.println(tmpstr);
				
			}
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		finally
		{
			try {
				if(!br.equals(null))
				br.close();
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
		
	}

}
结果:

lisi1=20
   lisi3=22
   lisi2=21
   {lisi1=20, lisi3=22, lisi2=21}

利用Properties对象特有属性加载流

public void load(InputStream inStream)//加载流

public void list(PrintStream out)//列出集合内容

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;



public class PropertiesDemo 
{

	public static void main(String[] args) throws IOException 
	{
		FileInputStream fis = new FileInputStream("D:\\Java\\oyy\\heima\\ReadFileKeyAndValue\\info.txt");
		Properties p = new Properties();
		p.load(fis);
		System.out.println(p);
	}
}

IO包中的其他类:

打印流:PrintWriter与PrintStream    可以直接操作输入流和文件。

该流提供了打印方法,可以将各种数据类型的数据都原样打印。

字节打印流:

构造函数可以接收的参数类型:

1、file对象。File

2、字符串路径。String

3、字节输出流。OutputStream.


字符打印流:

1、file对象。File

2、字符串路径。String

3、字节输出流。OutputStream.

4、字符输出流。Writer.



序列流:SequenceInputStream:对多个流进行合并。Enumeration枚举接口。

使用方法:

Vector<FileInputStream> v = new Vector<FileInputStream>();

v.add(new FileInputStream("c:\\1.txt));

v.add(new FileInputStream("c:\\2.txt));

v.add(new FileInputStream("c:\\3.txt));


Enumeration<FileInputStream> en = v.elements();

SequenceInputStream sis = new SequenceInputStream(en);

FileOutputStream fos = new FileOutputStream("c:\\4.txt");

应用举例:

文件的切割和合并。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值