------- <a target="blank">android培训</a>、<a target="blank">java培训</a>、期待与您交流! -------
package it.heima.mylog;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class InputStreamAndOutputStream {
/**
* 知识点:字节流,装饰设计模式
*
* 字节流的两个顶层父类:InputStream,OutputStream
* InputStream,OutputStream 用于操作文件,包括音频voide,媒体media。。。
* FileInputStream FileOutputStream 加入缓冲技术 BufferedInputStream BufferedOutStream
* 字节流体系和字符流体系一样。操作方法也一样。思想也一样。
*
* 字符流的两个顶层父类:Reader,Writer
* 操作文本字符 FileReader FileWriter
* 加入缓冲技术 BufferedReader BufferedWriter
* 缓冲技术的加入,实际上使用的似一种装饰设计模式,和继承的效果是一样的,
* 但是,整体体系看起来不像继承那么臃肿繁琐,够灵活。
*
* 装饰设计模式:
* 1,对一组对象的功能进行增强时,就可以使用该模式进行问题的解决。
* 2,装饰华为继承都能实现一样的特点,进行功能的增强。 想要对操作的动作进行效率得提高,按照面向对象的思想,可以通过继承对具体的进行功能的扩展。
* 效率得提高就要加入缓冲技术。 如果这个体系进行功能扩展,有多了流对象,这个流对象要提高效率,也要产生子类,这是就会发现
* 职位了提高功能,进行的继承,导致继承体系越来越大,不够灵活。 既然都是加入同一种缓冲技术,前一种是让缓冲和具体的对象相结合。
* 那么我们可以将缓冲进行单独的包装,哪个对象需要缓冲就将哪个对象和缓冲关联。好像也 就是多态的应用。
*/
// 方法: 千万不要用,效率没有!
public static void copy_4() throws IOException {
FileInputStream fis = new FileInputStream("c:\\0.mp3");
FileOutputStream fos = new FileOutputStream("c:\\4.mp3");
int ch = 0;
while ((ch = fis.read()) != -1) {
fos.write(ch);
}
fos.close();
fis.close();
}
// 不建议。
public static void copy_3() throws IOException {
FileInputStream fis = new FileInputStream("c:\\0.mp3");
FileOutputStream fos = new FileOutputStream("c:\\3.mp3");
byte[] buf = new byte[fis.available()];
fis.read(buf);
fos.write(buf);
fos.close();
fis.close();
}
//缓冲流
public static void copy_2() throws IOException {
FileInputStream fis = new FileInputStream("c:\\0.mp3");
BufferedInputStream bufis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("c:\\2.mp3");
BufferedOutputStream bufos = new BufferedOutputStream(fos);
int ch = 0;
while ((ch = bufis.read()) != -1) {
bufos.write(ch);
}
bufos.close();
bufis.close();
}
//自定义缓冲大小
public static void copy_1() throws IOException {
FileInputStream fis = new FileInputStream("c:\\0.mp3");
FileOutputStream fos = new FileOutputStream("c:\\1.mp3");
byte[] buf = new byte[1024];
int len = 0;
while ((len = fis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.close();
fis.close();
}
/**
* 关键词:File对象,FilenameFilter,filter文件名过滤器
* File对象:可以将一个已存在的或者不存在的文件或者目录封装成file对象,File file = new File("XX.txt");
* File对象的常见方法:
* 1,获取
* 获取文件名称。getName,返回:字符串
* 获取文件路径。getPath,getAbsolutePath,返回:字符串
* 获取文件大小。length,返回:long
* 获取文件修改时间。lastModified,返回时间毫秒值
*
* 2,创建与删除
* createNewFile,创建
* delete,删除
* 和输出流不一样,如果文件不存在,则创建,如果文件村子啊,就不创建。
*
* 3,判断
* exists,判断是否存在。操作文件时,最好先判断是否存在
*
* 4,重命名
* renameTo
*
* list方法
* 获取当前目录下的文件以及文件夹的名称,调用list方法的file对象中封装的必须是目录,否则会发生NullPointerException异常。
* 如果访问的是系统级目录,也会发生空指针异常。如果目录存在但是没有内容,会返回一个数组,长度为0.
*
* filter文件名过滤器
* 想要列出目录下指定后缀名的文件,就可以使用list的一个重写方法list(FilenameFilter filter)
* 返回是一个String数组,其实底层的实现过程还是用的list方法。
* 首先用list方法遍历一边目录,列出所有文件,创建一个数组。然后根据accept测试指定文件是否应该包含在某一文件列表中,包含是返回true,否则返回false。
* 有空多熟悉File对象。
*/
}
/**
* 每日单词:
*
* OOP object oriented programming 面向对象编程 OOP object oriented programming
* 面向对象编程
* API application programming interface 应用程序编程接口 IDE integrated development
* environment 集成开发环境 GUI graphics user interface 图形用户界面 DBMS data base
* management system 数据库管理系统 IDL interface XXXX language 接口定义语言
* 错误: 接口定义语言 definition 定义 definition de fini tion definition
* ADI
* GUI
* DBMS
* IDL
* JVM
* JDK
* AWT
*///---------------------------------------------------------------------------------------------------------------------------------------2014年3月16日整理
------- <a target="blank">android培训</a>、<a target="blank">java培训</a>、期待与您交流! -------