黑马程序员_<<properties,打印流,合并流,分割流>>
--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------
1. Properties
1.概述
Properties是Hashtable的子类,存储的格式那么也是键值对,但是键和值都是字符串类型
2.常用方法
public class PropertiesDemo1 {
public static void main(String[] args) {
Properties pro = new Properties();
/* setProperty(String key,String value)添加键和值 */
pro.setProperty("java01", "001");
pro.setProperty("java02", "002");
/* 通过键获得值:String getProperty(String key) */
System.out.println(pro.getProperty("java01"));
/* Set<String>stringPropertyNames()获得键集 */
Set<String> set = pro.stringPropertyNames();
for (String s : set)
System.out.println(s + ":" + pro.getProperty(s));
}
}
结果:
001
java02:002
java01:001
3.配置文件
将配置文件中的信息存到集合中,然后修改其键和值,然后在传给文件。配置文件中的信息都是用=号存储的,例如:张三=001
第一种方法:我们不使用Properties对象,就是用集合来操作,思路:我们将文件读取出来,然后对每一行进行用=分割,把左边的存为键,把右边的存为值。
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Properties;
import java.util.Set; public class PropertiesDemo1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("F:\\pro.txt"));//读取流
HashMap<String, String> map = new HashMap<String, String>();//map集合
String line = null;
while ((line = br.readLine()) != null) {
String[] s = line.split("=");
map.put(s[0], s[1]);
}
System.out.println(map);
} }
结果:
{java02=002, java03=003, java01=001}
第二种方法:我们使用Properties对象,这样我们可以方便的加载流,来操作文件。
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Properties;
import java.util.Set; public class PropertiesDemo1 {
public static void main(String[] args) throws IOException {
/* void load(Reader reader)将读取流字符流加载到集合中 */
Properties pro = new Properties();
FileReader fr = new FileReader("F:\\pro.txt");
pro.load(fr);// 将字符读取流中读取的文件放到Properties对象中
System.out.println("加载后的集合:" + pro);
/* 下面我们修改集合中的数值 */
pro.setProperty("java02", "hello");
/*
* store(Writer writer,String
* comments)通过字符写入流,把集合中的信息更新配置文件,comments是注视内容
*/
FileWriter fw = new FileWriter("F:\\pro.txt");
pro.store(fw, "java");// 更新配置文件,注释为:java
fr.close();
fw.close();
} }
结果:
加载后的集合:{java03=003, java02=002, java01=001}
4.计算程序运行次数
importjava.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Properties; public class PropertiesDemo { publicstatic void main(String[] args) throws IOException {
/*
* 计算程序的运行次数 思路: 1.创建一个配置文件,然后然后里面定义了一个计数器
* 2.每次运行的时候,都取出来,然后自增,然后再存回去
*/ Filefile = new File("F:\\pro.ini");
if(!file.exists())
file.createNewFile(); Propertiespro = new Properties();
pro.load(newFileInputStream(file));// 加载流
Stringvalue = pro.getProperty("count");
intcount = 0;
if(value != null)
count= Integer.parseInt(value);
count++;//自增
pro.setProperty("count",count + "");// 改变值
pro.store(newFileOutputStream(file), "java for count");// 更新文件
System.out.println(pro);
} }结果:
运行一次,count就+1.
2. 打印流
PrintStream:字节打印流
其构造方法传入的参数:
File对象,字符串路径,字节流。
PrintWriter:字符打印流
其构造方法传入的参数有:
File对象,字符串路径,字节流,字符流。
另外注意的是:字符流中传入的是流的话,可以设置自动刷新,只有使用println,printf,format方法可以自动刷新。
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter; public class PrintStreamDemo {
public static void main(String[] agrs) throws IOException {
// File f=newFile("F:\\demo.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(System.out,true);//true表示自动刷新,但是必须是println方法
String line = null;
while ((line = br.readLine()) != null) {
if ("over".equals(line))
return;
pw.println("内容是:" + line);
//pw.flush(); }
br.close();
pw.close();
}
}
现在是把内容打印在了控制台上,也可以打印在文件中,把PrintWriter流对象更改一下就可以的啊。
3. 合并流
将多个流合并成一个流,便于操作
例如:三个文件的内容写入到第四个文件中,那先把指定到前三个文件的流合并成一个流,然后指向第四个进行读取后,写入
1.可以现将两个流合并到一个流,然后再把合并流和另外一个流再合并,public SequenceInputStream(InputStreams1,InputStream s2)
2.也可以使用集合,public SequenceInputStream(Enumeration<? extends InputStream> e)
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;
import java.io.FileInputStream; public class SqueDemo {
public static void main(String[] agrs) throws IOException {
Vector<FileInputStream> v = new Vector<FileInputStream>();
v.add(new FileInputStream("F:\\1.txt"));
v.add(new FileInputStream("F:\\2.txt"));
v.add(new FileInputStream("F:\\3.txt"));
Enumeration<FileInputStream> en = v.elements();
SequenceInputStreamsis = new SequenceInputStream(en); FileOutputStream out = new FileOutputStream("F:\\4.txt");
byte[] b = new byte[1024];
int len = 0;
while ((len = sis.read(b)) != -1) {
out.write(b, 0, len);
out.flush();
}
sis.close();
out.close(); }
}
4. 切割流
将图片分割后,然后在合并
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector; public class PhotoDemo {
public static void main(String[] args) throws IOException { FenGe(); HeBing(); } private static void HeBing() throws FileNotFoundException, IOException {
/* 其实这个也可以使用循环,然后添加到集合, */
Vector<FileInputStream> v = new Vector<FileInputStream>();
v.add(new FileInputStream("F:\\part\\1.part"));
v.add(new FileInputStream("F:\\part\\2.part"));
v.add(new FileInputStream("F:\\part\\3.part"));
v.add(new FileInputStream("F:\\part\\4.part"));
v.add(new FileInputStream("F:\\part\\5.part"));
Enumeration<FileInputStream> en = v.elements();
SequenceInputStream sis = new SequenceInputStream(en); FileOutputStream out = new FileOutputStream("F:\\part\\1.bmp");
byte[] b = new byte[1024];
int len = 0;
while ((len = sis.read(b)) != -1) {
out.write(b, 0, len);
out.flush();
}
sis.close();
out.close();
} /* 分割 */
private static void FenGe() throws FileNotFoundException, IOException {
FileInputStream input = new FileInputStream("F:\\1.png"); FileOutputStream out = null;
byte[] buf = new byte[1024 * 100];
int count = 1;
int len = 0;
while ((len = input.read(buf)) != -1) {
out = new FileOutputStream("F:\\part\\" + (count++) + ".part");// 分割后的后缀名自己可以自定义
out.write(buf, 0, len);
out.flush();
out.close(); }
input.close();
} }
其实也可以分割媒体,电影和音乐的。
--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------
黑马程序员_<<properties,打印流,合并流,分割流>>的更多相关文章
- 黑马程序员_<<String类>>
--------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1. String类 1.概述 String ...
- 大数据-将MP3保存到数据库并读取出来《黑马程序员_超全面的JavaWeb视频教程vedio》day17
黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day17-资料源码\day17_code\day17_1\ 大数据 目 ...
- 2016年8月17日 内省(1)18_黑马程序员_使用beanUtils操纵javabean
8.内省(1):18_黑马程序员_使用beanUtils操纵javabean 1.导入两个包: 2.调用静态方法. 9.泛型 map.entrySet() :取出map集合的键值对组成一个set集合. ...
- 黑马程序员_高新技术之javaBean,注解,类加载器
----------- android培训.java培训.java学习型技术博客.期待与您交流! ---------- 第一部分 javaBean 一,由内省引出javaBean 1,内省: 内省对应 ...
- JavaWeb开发之四:servlet技术 黑马程序员_轻松掌握JavaWeb开发之四Servlet开发 方立勋老师视频教程相当的经典
总结: 记住:servlet对象在应用程序运行的过程中只创建一次,浏览器每次访问的时候,创建reponse对象 request对象,然后调用servlet的service方法,reponse对象和re ...
- 黑马程序员_ JAVA中的多线程
------- android培训.java培训.期待与您交流! ---------- 尽管线程对象的常用方法可以通过API文档来了解,但是有很多方法仅仅从API说明是无法详细了解的. 本来打算用一节 ...
- 黑马程序员_ Objective-c 面向对象笔记详解
1)类,对象,方法 类 类名: 1) 类名的第一个字母必须是大写 2) 不能有下划线 3) 多个英文单词,用驼峰标识 类的声明和实现 类的声明 @interface 类名 : NSObject { @ ...
- 黑马程序员_ Objective-c 概述及面向对象与三大特性
-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ (一).语法概述 1. oc介绍:(.m文件) 1> c语言的基础上,增加 ...
- 黑马程序员_ Objective-c 之block、protocol学习笔记
一):block学习总结 block :用来保存一段代码. 1.block 特点: 1> Block封装了一段代码,可以在任何时候执行 2> Block可以作为函数或者函数的返回值, ...
- 黑马程序员——OC语言 类和对象
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)类 1)类的声明 代码编写 ①定义一个Car类,拥有2个属性:轮子数 ...
随机推荐
- codevs 1222 信与信封问题
/* 二分图 题目给出的是确定不连通的边 如果我们拿剩下的可能联通也可能不连通的边跑最大匹配 如果不是完美非配 也就是说把所有可能的边都认为是一定的 这样都跑不出来(不能匹配到每个点)那么一定不能确定 ...
- ScrollView、ListView嵌套
1.手动设置ListView高度 经过测试发现,在xml中直接指定ListView的高度,是可以解决这个问题的,但是ListView中的数据是可变的,实际高度还需要实际测量.于是手动代码设置ListV ...
- java工程中使用freemarker例子
新建java project,引入freemarker.jar, 本工程是用的版本:freemarker-2.3.20 版本 java工程目录如下: test.ftl文件 HTML代码 name : ...
- 【转】 iOS如何实现表格的折叠效果?
原文 : http://blog.csdn.net/youcanping2008/article/details/9202167 一.实现原理:就是在点击表格组头视图的时候,如果该表格视图的组展开了 ...
- ios开发常见问题及解决办法
1 . storyboard连线问题 产生原因:将与storyboard关联的属性删除了,但是storyboard中还保持之前所关联的属性. 解决: 点击view controller 点击这排 ...
- MySQL 创建数据表
MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (col ...
- Javascript数组方法探究一二
1. Array.prototype.slice方法 数组的 slice 方法通常用来从一个数组中抽取片断.不过,它还有将“类数组”(比如arguments和HTMLCollection)转换为真 ...
- Hive学习之七《 Sqoop import 从关系数据库抽取到HDFS》
一.什么是sqoop Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL ...
- [置顶] Spring的DI依赖实现分析
DI(依赖注入)是Spring最底层的核心容器要实现的功能之一,利用DI可以实现程序功能的控制反转(控制反转即程序之间之间的依赖关系不再由程序员来负责,而是由Spring容器来负责) 一个简单的例子( ...
- JavaScript 目标装配式编程(Target Assemble Programming)
TAP概述 脚本中一切皆对象,若还以传统模式思考编程模式,那简直是对不起脚本解释器的强大支持:我们应该以最接近人类操作方式的来表达人的意图. 更接近工作实践的方式,比如游戏中,一个人物一个角色,人物的 ...