黑马程序员—SequenceInputStream和Properties类
2014-01-24 15:00
363 查看
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
1、SequenceInputStream
SequenceInputStream(Enumeration<?
extends InputStream> e)
通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream
对象的 Enumeration 型参数
SequenceInputStream(InputStream
s1, InputStream s2)
通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此
SequenceInputStream读取的字节。
下面的这个程序是用SequenceInputStream创建有三个输入流的管道流,并将管道流中的三个输入流依次写入指定的文件中。
publicclass SequenceDemo
{
publicstaticvoid main(String[] args)throws
IOException
{
//创建Vector集合,这个集合的泛型是FileInputStream类型的
Vector<FileInputStream> v =
new Vector<FileInputStream>();
//向集合中添加文件字节流对象
v.add(new FileInputStream("G:\\1.txt"));
v.add(new FileInputStream("G:\\2.txt"));
v.add(new FileInputStream("G:\\3.txt"));
//将这些集合中的元素转化成Enumeration类型
Enumeration<FileInputStream> en = v.elements();
//将这些文件字节流放入管道流中
SequenceInputStreamsis =
new SequenceInputStream(en);
//创建文件输出流对象
FileOutputStream fos =
new FileOutputStream("G:\\4.txt");
byte[] buf =
newbyte[1024];
int len = 0;
//将管道流中的字节流依次写入创建的文件中
while((len = sis.read(buf))!=-1)
{
fos.write(buf, 0, len);
}
fos.close();
sis.close();
}
}
2、思考:SequenceInputStream流可以把几个文件合成为一个文件,那么他可以把一个文件又分成若干个文件吗?答案是不能的,应为Sequence只用读取流SequenceInputStream而并没有SequenceOutputStream,所以他不能把一个文件分离成若干个文件。
下面一个例子中有两个函数,一个是用SequenceInputStream把文件合并的combine,一个是用普通方法把文件分离成若干个文件的split。
publicclass SplitFile
{
publicstaticvoid main(String[] args)throws
IOException
{
split();
combine();
}
//将两个文件用管道流合成一个文件
publicstaticvoid combine()throws
IOException
{
//创建Vector集合,集合中的对象是FileInputStream对象
Vector<FileInputStream> v =
new Vector<FileInputStream>();
//向集合中加入两个流对象
v.add(new FileInputStream("G:\\123\\2.part"));
v.add(new FileInputStream("G:\\123\\1.part"));
//将这些集合中的元素转化成Enumeration类型
Enumeration en = v.elements();
//将这些文件字节流放入管道流中
SequenceInputStreamsis =
new SequenceInputStream(en);
//创建文件输出流对象
FileOutputStream fos =
new FileOutputStream("G:\\111.jpg");
byte[] buf =
newbyte[1024];
int len = 0;
//将管道流中的字节流依次写入创建的文件中
while((len = sis.read(buf))!=-1)
{
fos.write(buf, 0, len);
}
fos.close();
sis.close();
}
//将一个文件分割成若干个文件
publicstaticvoid
split()throws IOException
{
//创建一个文件读取流对象用来读取文件
FileInputStream fis =
new FileInputStream("G:\\123.jpg");
//创建一个文件输出流对象用来写入数据
FileOutputStream fos =
null;
//定义一个1024*1024字节大小的字节数组
byte[] buf =
newbyte[1024*1024];
int len = 0;
//定义一个标识文件名的整型数
int count = 1;
//将源文件中的数据循环写入每次新建的文件中
//每循环一次就创建一个被写入数据的文件
while((len = fis.read(buf))!=-1)
{
//创建被写入数据的文件
fos = new FileOutputStream("G:\\123\\"+(count++)+".part");
//将数据写入创建好的文件中
fos.write(buf, 0, len);
//关闭输出流流
fos.close();
}
//关闭读取流
fis.close();
}
}
3、Properties
Properties是hashtable的子类也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串是集合中和IO技术相结合的集合容器
该对象的特点:可以用于键值对形式的配置文件
练习:
将info.txt中的键值数据存到集合中进行操作
1、用一个流和info.txt文件关联
2、读取一行数据,将该行数据用“=”进行切割
3、等号左边作为键,右边作为值,存入到Properties集合中即可
publicclass PropertiesDemo
{
publicstaticvoid main(String[] args)
throws IOException
{
//setAndget();
method_1();
}
publicstaticvoid method_1()throws
IOException
{
//打开一个字符流读文件
BufferedReader bufr =
new BufferedReader(new FileReader("info.txt"));
String line = null;
//创建一个属性对象
Properties prop =
new Properties();
while((line = bufr.readLine())!=null)
{
//“=”分割字符串成两个字符串
String[] arr = line.split("=");
//将分割出来的字符串存进Properies对象中
prop.setProperty(arr[0], arr[1]);
System.out.println(arr[0]+"::"+arr[1]);
}
bufr.close();
System.out.println(prop);
}
//设置和获取属性名和值
publicstaticvoid setAndget()
{
Properties prop =
new Properties();
//设置属性键和值
prop.setProperty("name",
"admin");
prop.setProperty("password",
"lsk123");
System.out.println(prop);
//获得属性的值
String name = prop.getProperty("name");
System.out.println(name);
Set<String> sp = prop.stringPropertyNames();
//遍历属性集合
for(String s : sp)
{
System.out.println(s+prop.getProperty(s));
}
}
}
4、Properties的例子:
创建程序运行次数配置文件超过限定次数时,不能运行程序
publicclass RunCount
{
publicstaticvoid main(String[] args)
throws IOException
{
//创建Properties对象
Properties prop =
new Properties();
//创建文件对象
File file = new File("count.ini");
//如果file不存在就创建
if(!file.exists())
file.createNewFile();
//创建文件读取流对象
FileInputStream fis =
new FileInputStream(file);
//从输入流中读取属性列表
prop.load(fis);
int count = 0;
//获取value属性值
String value = prop.getProperty("time");
if(value!=null)
{
count = Integer.parseInt(value);
//如果运行次数大于5次结束运行
if(count>5)
{
System.out.println("please regest!");
return ;
}
}
//运行次数加一
count++;
//把time属性的值设置为count
prop.setProperty("time", count+"");
//创建写文件流
FileOutputStream fos =
new FileOutputStream(file);
//将此 Properties
表中的属性列表(键和元素对)写入输出流
prop.store(fos,
"");
fos.close();
fis.close();
}
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
1、SequenceInputStream
SequenceInputStream
表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
SequenceInputStream
和InputStream一样都有read方法,用法基本一致。
SequenceInputStream
的构造方法:
SequenceInputStream(Enumeration<?
extends InputStream> e)
通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream
对象的 Enumeration 型参数
SequenceInputStream(InputStream
s1, InputStream s2)
通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),以提供从此
SequenceInputStream读取的字节。
下面的这个程序是用SequenceInputStream创建有三个输入流的管道流,并将管道流中的三个输入流依次写入指定的文件中。
publicclass SequenceDemo
{
publicstaticvoid main(String[] args)throws
IOException
{
//创建Vector集合,这个集合的泛型是FileInputStream类型的
Vector<FileInputStream> v =
new Vector<FileInputStream>();
//向集合中添加文件字节流对象
v.add(new FileInputStream("G:\\1.txt"));
v.add(new FileInputStream("G:\\2.txt"));
v.add(new FileInputStream("G:\\3.txt"));
//将这些集合中的元素转化成Enumeration类型
Enumeration<FileInputStream> en = v.elements();
//将这些文件字节流放入管道流中
SequenceInputStreamsis =
new SequenceInputStream(en);
//创建文件输出流对象
FileOutputStream fos =
new FileOutputStream("G:\\4.txt");
byte[] buf =
newbyte[1024];
int len = 0;
//将管道流中的字节流依次写入创建的文件中
while((len = sis.read(buf))!=-1)
{
fos.write(buf, 0, len);
}
fos.close();
sis.close();
}
}
2、思考:SequenceInputStream流可以把几个文件合成为一个文件,那么他可以把一个文件又分成若干个文件吗?答案是不能的,应为Sequence只用读取流SequenceInputStream而并没有SequenceOutputStream,所以他不能把一个文件分离成若干个文件。
下面一个例子中有两个函数,一个是用SequenceInputStream把文件合并的combine,一个是用普通方法把文件分离成若干个文件的split。
publicclass SplitFile
{
publicstaticvoid main(String[] args)throws
IOException
{
split();
combine();
}
//将两个文件用管道流合成一个文件
publicstaticvoid combine()throws
IOException
{
//创建Vector集合,集合中的对象是FileInputStream对象
Vector<FileInputStream> v =
new Vector<FileInputStream>();
//向集合中加入两个流对象
v.add(new FileInputStream("G:\\123\\2.part"));
v.add(new FileInputStream("G:\\123\\1.part"));
//将这些集合中的元素转化成Enumeration类型
Enumeration en = v.elements();
//将这些文件字节流放入管道流中
SequenceInputStreamsis =
new SequenceInputStream(en);
//创建文件输出流对象
FileOutputStream fos =
new FileOutputStream("G:\\111.jpg");
byte[] buf =
newbyte[1024];
int len = 0;
//将管道流中的字节流依次写入创建的文件中
while((len = sis.read(buf))!=-1)
{
fos.write(buf, 0, len);
}
fos.close();
sis.close();
}
//将一个文件分割成若干个文件
publicstaticvoid
split()throws IOException
{
//创建一个文件读取流对象用来读取文件
FileInputStream fis =
new FileInputStream("G:\\123.jpg");
//创建一个文件输出流对象用来写入数据
FileOutputStream fos =
null;
//定义一个1024*1024字节大小的字节数组
byte[] buf =
newbyte[1024*1024];
int len = 0;
//定义一个标识文件名的整型数
int count = 1;
//将源文件中的数据循环写入每次新建的文件中
//每循环一次就创建一个被写入数据的文件
while((len = fis.read(buf))!=-1)
{
//创建被写入数据的文件
fos = new FileOutputStream("G:\\123\\"+(count++)+".part");
//将数据写入创建好的文件中
fos.write(buf, 0, len);
//关闭输出流流
fos.close();
}
//关闭读取流
fis.close();
}
}
3、Properties
Properties是hashtable的子类也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串是集合中和IO技术相结合的集合容器
该对象的特点:可以用于键值对形式的配置文件
练习:
将info.txt中的键值数据存到集合中进行操作
1、用一个流和info.txt文件关联
2、读取一行数据,将该行数据用“=”进行切割
3、等号左边作为键,右边作为值,存入到Properties集合中即可
publicclass PropertiesDemo
{
publicstaticvoid main(String[] args)
throws IOException
{
//setAndget();
method_1();
}
publicstaticvoid method_1()throws
IOException
{
//打开一个字符流读文件
BufferedReader bufr =
new BufferedReader(new FileReader("info.txt"));
String line = null;
//创建一个属性对象
Properties prop =
new Properties();
while((line = bufr.readLine())!=null)
{
//“=”分割字符串成两个字符串
String[] arr = line.split("=");
//将分割出来的字符串存进Properies对象中
prop.setProperty(arr[0], arr[1]);
System.out.println(arr[0]+"::"+arr[1]);
}
bufr.close();
System.out.println(prop);
}
//设置和获取属性名和值
publicstaticvoid setAndget()
{
Properties prop =
new Properties();
//设置属性键和值
prop.setProperty("name",
"admin");
prop.setProperty("password",
"lsk123");
System.out.println(prop);
//获得属性的值
String name = prop.getProperty("name");
System.out.println(name);
Set<String> sp = prop.stringPropertyNames();
//遍历属性集合
for(String s : sp)
{
System.out.println(s+prop.getProperty(s));
}
}
}
4、Properties的例子:
创建程序运行次数配置文件超过限定次数时,不能运行程序
publicclass RunCount
{
publicstaticvoid main(String[] args)
throws IOException
{
//创建Properties对象
Properties prop =
new Properties();
//创建文件对象
File file = new File("count.ini");
//如果file不存在就创建
if(!file.exists())
file.createNewFile();
//创建文件读取流对象
FileInputStream fis =
new FileInputStream(file);
//从输入流中读取属性列表
prop.load(fis);
int count = 0;
//获取value属性值
String value = prop.getProperty("time");
if(value!=null)
{
count = Integer.parseInt(value);
//如果运行次数大于5次结束运行
if(count>5)
{
System.out.println("please regest!");
return ;
}
}
//运行次数加一
count++;
//把time属性的值设置为count
prop.setProperty("time", count+"");
//创建写文件流
FileOutputStream fos =
new FileOutputStream(file);
//将此 Properties
表中的属性列表(键和元素对)写入输出流
prop.store(fos,
"");
fos.close();
fis.close();
}
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员——Java基础---IO(三)--File类、Properties类、打印流、序列流(合并流)
- 黑马程序员——IO流(Properties类)
- 黑马程序员--IO(二)-File类、Properties类、打印流、序列流(合并流)
- 黑马程序员——File类及Properties类
- 黑马程序员—IO(二)File类、Properties类、打印流、序列流(合并流)
- 黑马程序员——24,File类,Properties类,
- 黑马程序员——Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)
- 黑马程序员——IO流(File类、Properties类、打印流、序列流)
- 黑马程序员--IO(二)--File类、Properties类、打印流、序列流等
- 黑马程序员:Java基础总结----集合与IO的结合[Properties类]
- 黑马程序员——Java基础---IO、File类、Properties类、打印流、序列流(合并流)
- 黑马程序员——Java基础——File、Properties类、 打印流、序列流
- 黑马程序员-Properties类-配置文件读写-限定软件运行次数
- 黑马程序员-第二十一天(Properties类)
- 黑马程序员--IO流中的File类和Properties类、其他流
- 黑马程序员-Properties类对配置文件的读取与操作。
- 黑马程序员:java.util.Properties类 学习笔记
- 黑马程序员_File类和Properties类
- 黑马程序员:Properties类介绍:集合中和IO技术相结合的集合容器
- 黑马程序员——Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)