----------------- android培训、java培训、期待与您交流!-----------------
一 打印流
打印流 --PrintStream字节打印流 ,PrintWriter字符打印流
打印流 --顾名思义用来进行打印操作的。是整个IO包中输出信息最方便的类,可以打印任何数据类型它在构造方法中接受 OutputStream及子类.打印流中提供了多种数据类型的print();println()打印方法。打印流本身是不会报异常的。
打印流体现了装饰设计模式---
打印流可直接接受OutputStream的实例,因为它与OutputStream相比可以更方便的输出数据。
相当于将OutputStream类的输出方法进行包装优化--此种设计叫装饰模式设计
在JDK1.5以后java新增了打印流的格式化打印才输出方式,提供了printf()方法进行格式话输出
下面来看看打印流的基本使用,代码如下:
public class StreamDemo3 {
public static void main(String[] args) throws IOException {
printStreamT();
}
/**
*打印流打印数据
*/
public static void printStreamT(){
PrintStream ps =null; //创建打印流对象
try {
//实例化对象,指定操作文件
ps =new PrintStream(new FileOutputStream("aa.txt"));
//打印数据
ps.print("好好学习");
ps.println("Hellow Java");
ps.println(1+1);
//格式化打印数据
String s ="黑马"; int a =10; double f = 1.3; char b = 'Z';
// %s %d %lf %c 分别表示内容为字符串,整型,浮点型,字符型
ps.printf("字符串:%s;整数:%d;小数:%lf;字符型:%c", s,a,f,b);
ps.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
用来进行2个线程间的通讯PipedInputStream管道输入流,PipedOutputStream管道输出流。管道流可以直接进行连接--y.connect(x)连接管道,通过线程使用。下面来看看具体代码:
public class StreamDemo3 {
public static void main(String[] args) throws IOException {
PipedInputStream pis = new PipedInputStream(); //创建管道输入流和管道输出流
PipedOutputStream pos =new PipedOutputStream();
read read =new read(pis);
write write =new write(pos);
pis.connect(pos); //必须连接管道
//分别创建线程
Thread t1 =new Thread(read);
Thread t2 =new Thread(write);
t1.start();
t2.start();
}
}
//实现Runnable的的写入数据类,管道输出流
class write implements Runnable{
private PipedOutputStream pos;
public write(PipedOutputStream p){
this.pos =p;
}
@Override
public void run() {
try {
//方便看到输出效果
System.out.println("写入数据--请等待5s");
Thread.sleep(5000);
pos.write("管道流写入数据".getBytes()); //写入数据
pos.close(); //关闭流
} catch (Exception e) {
e.printStackTrace();
}
}
}
//实现Runnable的读取数据类,管道输入流
class read implements Runnable{
private PipedInputStream pis;
public read(PipedInputStream p){
this.pis =p;
}
@Override
public void run() {
//定义字节数组,接受读取到的数据,将之再打印出来
byte [] by =new byte[1024];
int len;
try {
System.out.println("读取数据前");
while ((len=pis.read(by))!=-1) {
System.out.println(new String(by,0,len));
}
pis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
三 Properties---- 是hashTable的子类
是一个集合与IO技术相结合的集合容器。具备Map集合的特点,存储的信息都是以键值对存在的字符串数据。
常用于存储配置文件信息。
下面看下具体使用代码
public class StreamDemo3 {
public static void main(String[] args) throws IOException {
propertiesT();
propertiesSave();
}
//Properties读取和存储数据
public static void propertiesT() {
Properties p =new Properties(); //创建Properties对象
//存储数据的方法 setProperties(key,value),put(key,value)
p.setProperty("zhy", "12");
p.setProperty("time", "2014-6-7");
p.put("th", "111");
p.setProperty("zhy", "123"); //设置修改键对应的 值
//p.put("zhy", 11); 当在 键中已有数据后,添加则覆盖已有数据
System.out.println(p);
//stringPropertyNames()--得到所有数据将之返回一个set集合
Set<String > st = p.stringPropertyNames();
for (String s : st) {
//便利set 集合输出数据
System.out.println(p.getProperty(s));
}
}
/**
*读取/修改 流中数据并保存
*/
public static void propertiesSave(){
try {
FileInputStream fis =new FileInputStream("xx.txt"); //创建流对象关联文件
Properties p =new Properties();
//load()--将流中的数据加载到Properties集合中
p.load(fis);
//修改键对应的 值
p.setProperty("zhy", "new zhy");
//如果要对xx.txt文件一个值进行修改,那么要操作的流对象要在p修改后的位置,
//否则就是将xx.txt中的内容替换为了那修改的一个值
FileOutputStream fos =new FileOutputStream("xx.txt");
//将p读取到的数据修改后在保存到文件
p.store(fos, "这里要写的是指定的 注释信息");
//list()---将列表输出到指定的打印流
p.list(System.out);
fos.close(); //关闭流
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}