-----------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");
应用举例:
文件的切割和合并。