黑马程序员--java学习总结(6)

来源:互联网 发布:java软件设计模式 编辑:程序博客网 时间:2024/04/28 21:59
  1. ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

----IO流

流:可以理解为数据的流动,IO流最终都要以对象来体现,对象都存在IO包中。
流的分类:
1.根据输入和输出的不同,分为输入流(读)和输出流(写)。
2.根据处理的数据不同,分为字节流和字符流。

流的操作规律:
1.明确源和目的
数据源:就是需要读取,可以使用两个体系:InputStream,Reader;
数据汇:就是需要写入,可以使用两个体系:OutputsTream,Writer;
2.操作的数据是否是纯文本数据?
如果是:数据源:Reader
       数据汇:Writer
如果不是:数据源:InputStream
数据汇: OutputStream
3.虽然确定了一个体系,但是该体系中有太多的对象,到底有哪个?这时就需要明确操作的数据设备。
数据源对应的设备:硬盘(File),内存(数组),键盘(System.in)
数据汇对应的设备:硬盘(File),内存(数组),键盘(System.out)
4.需要提高效率吗?
如果需要就用缓冲进行装饰。

注意事项:
当用FileWrite和FileOutputStream的构造方法关联文件(会自动创建文件)时,如果参数中带的是flase或者是没有boolean的参数时,会将相同路径下原来的同名文件覆盖;如果参数是true,则只会续写(也就是从原始数据的尾部开始写)原文件,而不会覆盖。File中的createNewFile()方法也不会覆盖,如果有同名文件,则不创建,如果没有,则创建。其次,RandomAccessFile raf=new RandomAccessFile("random.txt","rw");当参数为"rw"时表示:当这个文件不存在时,会创建该文件,如果文件已存在,则不会创建,也不会覆盖原文件,只是将数据写在原文件上(修改)。

转换流:
InputStreamReader是字节流通向字符流的桥梁,构造方法中的第一个参数是要读取的源文件,属于InputStream字节流类型,第二个参数可以指定码表。将源文件中的字节数据通过查码表得到字符数据。(其用于操作文件的子类FileReader已经将转换动作封装了,并且使用的编码表是本机默认的编码表)
OutputStreamWriter是字符流通向字节流的桥梁,构造方法中的第一个参数是要写入的目的文件,属于OutputStream字节流类型,第二个参数可以指定码表。将字符数据通过码表写入到字节流目的文件中。(其用于操作文件的子类FileWriter已经将转换动作封装了,并且使用的编码表是本机默认的编码表。)

获取键盘录入:
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
输出到控制台:
BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));

--File类

在调用File类中的isDirectory()和isFile()方法时必须要先调用exists()判断该文件是否存在。
boolean isAbsolute():判断刺抽象路径名是否为绝对路径名(文件不存在也可以判断)。
String[] list():列出指定目录下的当前文件和文件夹的名称。包括隐藏文件。
如果调用list()方法的File对象中封装的是一个文件,那么list方法返回数组为null。如果封装的对象不存在也会返回null。只有封装的对象存在并且是文件夹时,这个方法才有效。
File[] listFiles(FilenameFilter filter):能够获取目录里指定类型的文件。

----递归

递归就是自身调用自身。
比如求斐波那契数列的第n项就是递归的一个体现。(0,1,1,2,3,5,8,13,21,34,55。。。)

什么时候用:
当一个功能被重复使用,而每次使用该功能时参数不确定,都由上次的功能元素结果来确定。
简单的说,就是当功能内部用到该功能,但是传递的参数不确定。这时就可以使用递归。

递归的注意事项:
1.一定要定义递归的条件。
2.递归的次数不宜过多,否则会出现StackOverflowError(栈内存溢出)。




0 0