--------------------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,打印流,合并流,分割流>>的更多相关文章

  1. 黑马程序员_<<String类>>

    --------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1. String类 1.概述 String ...

  2. 大数据-将MP3保存到数据库并读取出来《黑马程序员_超全面的JavaWeb视频教程vedio》day17

    黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day17-资料源码\day17_code\day17_1\ 大数据 目 ...

  3. 2016年8月17日 内省(1)18_黑马程序员_使用beanUtils操纵javabean

    8.内省(1):18_黑马程序员_使用beanUtils操纵javabean 1.导入两个包: 2.调用静态方法. 9.泛型 map.entrySet() :取出map集合的键值对组成一个set集合. ...

  4. 黑马程序员_高新技术之javaBean,注解,类加载器

    ----------- android培训.java培训.java学习型技术博客.期待与您交流! ---------- 第一部分 javaBean 一,由内省引出javaBean 1,内省: 内省对应 ...

  5. JavaWeb开发之四:servlet技术 黑马程序员_轻松掌握JavaWeb开发之四Servlet开发 方立勋老师视频教程相当的经典

    总结: 记住:servlet对象在应用程序运行的过程中只创建一次,浏览器每次访问的时候,创建reponse对象 request对象,然后调用servlet的service方法,reponse对象和re ...

  6. 黑马程序员_ JAVA中的多线程

    ------- android培训.java培训.期待与您交流! ---------- 尽管线程对象的常用方法可以通过API文档来了解,但是有很多方法仅仅从API说明是无法详细了解的. 本来打算用一节 ...

  7. 黑马程序员_ Objective-c 面向对象笔记详解

    1)类,对象,方法 类 类名: 1) 类名的第一个字母必须是大写 2) 不能有下划线 3) 多个英文单词,用驼峰标识 类的声明和实现 类的声明 @interface 类名 : NSObject { @ ...

  8. 黑马程序员_ Objective-c 概述及面向对象与三大特性

    -----------android培训.java培训.java学习型技术博客.期待与您交流!------------ (一).语法概述 1. oc介绍:(.m文件) 1> c语言的基础上,增加 ...

  9. 黑马程序员_ Objective-c 之block、protocol学习笔记

    一):block学习总结 block :用来保存一段代码. 1.block 特点:  1> Block封装了一段代码,可以在任何时候执行   2> Block可以作为函数或者函数的返回值, ...

  10. 黑马程序员——OC语言 类和对象

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)类 1)类的声明 代码编写 ①定义一个Car类,拥有2个属性:轮子数 ...

随机推荐

  1. datediff(),dateadd(),datepart().datename()时间处理函数

    原文链接:http://www.cnblogs.com/whz111/articles/2445777.html --convert(时间)对应数字表示的时间格式 select CONVERT(var ...

  2. PHP MySQL 插入多条数据

    PHP MySQL 插入多条数据 使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句. 以下实例向 "MyG ...

  3. 【C#学习笔记】一、基础知识

    1.1数据类型(P43) 类型 别名 允许的值 sbyte System.SByte -128~127 byte System.Byte 0~255 short System.Int16 -32768 ...

  4. [转]C++基本功和 Design Pattern系列 ctor & dtor

    今天Aear讲的是class.ctor 也就是constructor, 和  class.dtor, destructor. 相信大家都知道constructor 和 destructor是做什么用的 ...

  5. restrict和volatile的作用

    每当看到这两个关键字,我都无比的头痛啊,当时看到理解了一下就明白了,但是在此遇到就忘记是怎么用的了,今天就索性写一写吧,好记性不如烂笔头呗,烂笔头不如存在网上. restrict是c99引入的,关键字 ...

  6. 02_ Windows与Linux双重引导

    1. Grub2引导window. ---------------------步骤1--------------------------------- vim /etc/grub.d/40_custo ...

  7. jQuery实现按Enter键触发事件?

    按Enter触发 $(function(){ document.onkeydown = function(e){ var ev = document.all ? window.event : e; ) ...

  8. 浅析a标签的4个伪类 .

    关于伪类,大家最熟悉的还是a标签的4个伪类::link        有链接属性时:visited    链接地址已被访问过:active     被用户激活(在鼠标点击与释放之间发生的事件):hov ...

  9. android.os.NetworkOnMainThreadException异常处理办法

    网上搜索后知道是因为版本问题,在4.0之后在主线程里面执行Http请求都会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧. 在发起Http请求的Activity里面的onCreate函数里 ...

  10. IOS--UIAlertView的使用方法详细

    IOS--UIAlertView的使用方法详细   // UIAlertView的常用方法 // 标准样式 UIAlertView *oneAlertView = [[UIAlertView allo ...