Properties类
一、概述
1、Properties是Hashtable的子类,它具备Map集合的特点。而且它里面还有存储的键值对,都是字符串,无泛型定义。是集合中和IO技术想结合的集合容器。
2、特点:
1)可用于键值对形式的配置文件
2)在加载时,需要数据有固定的格式,常用的是:键=值
二、特有方法
1、设置
Object setProperty(String key,String value);
//设置键和值,调用Hashtable的方法put
2、获取
String getProperty(String key);
//指定key搜索value
Set stringPropertyName();
//返回属性列表的键集,存入Set集合
3、加载流和存入流
void load(InputStream ism);
//从输入字节流中读取属性列表(键和元素对)。又称将流中的数据加载进集合。
void load(Readerreader);
//从输入字符流中读取属性列表(键和元素对)。又称将流中的数据加载进集合。
voidlist(PrintStream out);//将属性列表输出到指定的输出流
void store(OutputStreamout,String comments);
//对应load(InputStream )将属性列表(键值对)写入输出流。comments属性列表的描述。
void store(Writerwriter, String comments);
//对应load(Reader)将属性列表(键值对)写入输出流。comments属性列表的描述。
package properties;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;
public class PropertiesDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//SetandGet();
loadDemo();
}
public static void loadDemo() throws IOException {
Properties p=new Properties();
FileInputStream fis=new FileInputStream("F:\\info.txt");
//将流存到集合中
p.load(fis);
p.setProperty("zhaosi", "29");
p.list(System.out);
FileOutputStream fos=new FileOutputStream("F:info.txt");
p.store(fos, "haha");
p.list(System.out);
}
//设置和获取元素
public static void SetandGet(){
Properties p=new Properties();
p.setProperty("张三", "13");
p.setProperty("wangwu", "23");
p.setProperty("赵六", "33");
System.out.println(p);
Set<String> names=p.stringPropertyNames();
for (String name : names) {
System.out.println(name+":::"+p.getProperty(name));
}
}
}
练习二
package properties;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class RunCount {
/**
* 记录程序运行次数的配置文件
* 运行到多少次需要去注册
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File file=new File("F:\\count.ini");
if (!file.exists()) {
file.createNewFile();
}
FileInputStream fis=new FileInputStream(file);
//把流存到集合中
Properties p=new Properties();
p.load(fis);
int count=0;
String value=p.getProperty("time");
if (value!= null) {
count=Integer.parseInt(value);
if (count>=5) {
System.out.println("您的体验次数用完,需要注册缴费!");
}
count++;
}
p.setProperty("time",count+"");
FileOutputStream fos=new FileOutputStream("F:\\count.ini");
p.store(fos, "");
}
}
打印流
一、概述
1、打印流包括:PrintStream和PrintWriter
2、该流提供了打印方法,可将各种类型的数据都原样打印。
二、字节打印流:PrintStream
构造方法中可接收的参数类型:
1、File对象。File
2、字符串路径:String
3、字符输出流:OutputStream
三、字符串打印流:PrintWriter
构造方法中可接受的参数类型
1、File对象:File
2、字符串路径:String
3、字节输出流:OutputStream
4、字符输出流:Writer
练习:
package printWriterDemo;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class PrintStream {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter("F:\\1.txt")),true);
String line=null;
while ((line=bf.readLine())!=null) {
if ("over".equals(line)) {
break;
}
out.println(line.toUpperCase());
//out.flush();
}
bf.close();
out.close();
}
}
序列流
一、概述
1、SequenceInputStream对多个流进行合并。也被称为合并流。
二、常见合并多个流文件步骤
1、创建集合,并将流对象添加进集合
2、创建Enumeration对象,将集合元素加入。
3、创建SequenceInputStream对象,合并流对象
4、创建写入流对象,FileOutputStream关联写入文件
5、利用SequenceInputStream对象和FileOutputStream对象读数据进行反复读写操作。