黑马程序员-探究字节流五(其他流)

来源:互联网 发布:linux常用命令详解 编辑:程序博客网 时间:2024/06/02 07:03

------ <a  target="blank">android培训</a>、<a  target="blank">java培训</a>、期待与您交流! -------

package it.heima.mylog;


import java.io.File;

public class OtherStream {
/**
* 关键词:递归,File对象的操作,properties集合,自定义load功能。 
* 递归: 函数自身直接或间接地调用到了自身就是递归。
* 一个功能在被重复使用,并且每次使用时,参与运算结果和上一次调用有关练,就可以用递归来解决问题。 
* 注意的几点:
* 递归一定要明确条件。否则容易栈溢出。就是程序死循环。 还有就是注意递归的次数。
*  File对象封装一个文件后,想要删除,必须从里往外删。就雪要进行深度遍历。
*/
/* 删一个文件夹目录 */
public static void main(String[] args) {
File dir = new File("e:\\demodir");
removeDir(dir);
}

public static void removeDir(File dir) {

File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
removeDir(file);// 开始递归啦
} else {
System.out.println(file + ":" + file.delete());// 删除文件
}
}
System.out.println(dir + ":" + dir.delete());
}
}
/**
 * 关键词:打印流PrintStream,PrintWriter;集合Sequence。
 * 
 * public class PrintStream extends FilterOutputStream 字节打印流
 * 1,提供打印方法,可以对多种数据类型值进行打印。并保持数据的表现形式。 
 * 2,它不抛任何IOException异常。
 * 3,构造函数,可以接收三种类型的值。字符串路径,File对象,字节输出流。 
 * 4,PrintStream打印的所有字符都使用平台默认字符编码转换为字节。
 * 
 * PrintStream out = new PrintStream("print.txt");
 * out.print(97);将97先变成字符保持原样将数据打印到目的地。 out.writer(97);只写最低8位。
 * 
 * public class PrintWriter extends Writer 字符打印流
 * 构造函数参数可以为:字符串路劲,File对象,字节输出流,字符输出流。 PrintWriter的构造函数参数比PrintStream多一个字符输出流。
 * 
 * BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
 * PrintWriter out = new PrintWriter(new FileWriter("out.txt"),true);true为流自动刷新
 * String line = new null; while((line = bufr.readLine()) != null){
 * if("over".equals(line)) break; out.println(line.toUpperCase()); out.flush();
 * } out.close(); bufr.close();
 * 
 * public class SequenceInputS tream extends InputStream 字节输出流集合 
 * 构造函数参数:
 * 1,Enumeration<? extends InputStream> en 
 * 2,还可以传递两个InputStream
 * 
 * 需求:将1.txt,2.txt,3.txt文件中的内容合并到一个文件中。 
 * ArrayList<FileInputStream> al = new ArrayList<FileInputStream>(); 
 * for(int x=1; x<=3; x++){ al.add(new FileInputStream(x+".txt")); } 
 * 用集合的方法获取枚举器
 * Enumeration<FileInputStream> en = Collections.enumeration(al); 
 * SequenceInputStream sis = new SequenceInputStream(en);
 * 
 * FileOutputStream fos = new FileOuptutStream("1234.txt"); 
 * byte[] buf = new byte[1024]; 
 * int len = 0; while((len = sis.read(buf)) != -1){fos.writer(buf,0,len) } 
 * fos.close(); sis.close();
 * 
 * 每日词汇: JDBC Java Data Base Connectivity 数据库连接 SE Standard Edition 标准 EE
 * Enterprise Edition 企业 ME Micro Edition 微xing
 * Properties集合 隶属于Map旗下的Hashtable。
 * Properties集合的特点: 该集合中的键值都是字符串类型的。 集合的数据可以保存到流中,或者从流中读取。
 * 通常该集合用于操作以键值对形式存在的配置文件。
 * 模拟load功能: 太晚了,不搞了,明天白天写。记得模拟一个load功能。 就是对已有的配置文件中的信息进行修改。 待续。。。
 */

/**
关键词:RandomAccessFile随机读取流,PipedInputStream管道流,DataOutput,ByteArrayInputStream。。。Other

RandomAccessFile类
1,属于Object,不是IO体系中的子类。
2,非常牛的一个类,既能读,也能写。
3,其实它对象的内部就是一个大型的Byte数组,并可以通过指针操作数组中的元素。
4,但是有局限性,该对象的源或目的只能是文件,在构造函数参数就可以爱看出来。
5,使用对象写入信息时,如果目的文件不存在则创建,如果文件存在就不创建,和其他流不同,其他流是一缕覆盖。
6,RandomAccessFile类的对象还有其他应用,因为可以通过指针操作数组元素的读写,一般结合多线程技术,实现断点连续下载的功能。迅雷下载就是应用的这类对象。

管道流
是可以把输入流和输出流相关联起来的。就像管道一样。一般和多线程技术相结合。因为他的读取流和输入流是两个线程,
为了防止死锁的情况发生。

后面的类看名字就可以判断出操作的数据类型。
类有点多,起码要了解,IO包基本就搞完了,后面都是一些加强类,装饰设计模式完成的。

还有一点就是编码和解码

数据发到Tomcat都是字节数组,是通过GBK编码得到的,而Tomcat服务器是默认的ISO8895-1的解码表。要先搞清楚
*/
------ <a  target="blank">android培训</a>、<a  target="blank">java培训</a>、期待与您交流! -------
0 0
原创粉丝点击