------- android培训、java培训、期待与您交流! ----------
递归:
1.我们知道:在一个方法内,可以调用另一个方法;
2.另外:在一个方法内,也可以调用它自身,这种方法调用本身的方式,就叫:方法的递归调用;
递归的注意事项:
1.要有出口,否则就是死递归;
2.次数不能太多,否则就内存溢出;
3.构造方法不能递归使用;在编译时,就会编译错误;
例如:
package cn.itcast.demo04_递归练习_递归输出指定目录下所有的java文件的绝对路径;
import java.io.File;
/*
* 递归输出指定目录下所有的java文件的绝对路径
*
* 题目:列出C:\\20150822\\
* 目录下所有的.java文件;
*
* 步骤:
* 1.封装初始目录:File file = new File("C:\\20150822");
* 2.列出目录下所有的文件和目录的数组:File[] fileArray = file.listFiles();
* 3.遍历数组:
* 1).判断是否是文件,并且以.java结尾:
* 是:输出;
* 否:判断是否是目录:
* 是:回到第2步;(从第2步到这里,就可以作为一个方法,来递归调用)
*
*/
public class Demo {
public static void main(String[] args) {
File file = new File("C:\\20150822");
listFiles(file);
System.out.println("程序结束!");
}
private static void listFiles(File file){
if(file == null){
return;
}
File[] fileArray = file.listFiles();
if(fileArray != null){
for(File f : fileArray){
if(f.isFile() && f.getName().endsWith(".java")){
System.out.println(f.getAbsolutePath());
}else if(f.isDirectory()){
listFiles(f);
}
}
}
}
}
IO流:
1.字节流:
1).输出流:OutputStream:写入的方法:三种:写入一个字节;写入一个字节数组;写入一个字节数组的一部分
|--FileOutputStream:
|--FilterOutputStream(不学):
|--BufferedOutputStream
2).输入流:InputStream:读取的方法:两种:读取一个字节;读取一个字节数组;
|--FileInputStream:
|--FilterInputStream(不学):
|--BufferedInputStream:
2.字符流:
1).输出流:Writer:写入的方法:五种:写入一个字符;写入一个字符数组;写入一个字符数组的一部分;写入一个字符串;写入一个字符串的一部分
|--OutputStreamWriter(转换流):是字符流通向字节流的桥梁
|-FileWriter:
|--BufferedWriter:
newLine():输出一个换行符;
2).输入流:Reader:读取的方法:两种:读取一个字符;读取一个字符数组;
|--InputStreamReader(转换流):是字节流通向字符流的桥梁
|--FileReader:
|--BufferedReader:
readLine():读取一行数据;
3.数据输入输出流:可以读写Java中基本数据类型,当写入文本时,是按各种数据类型相应的字节数写入的;
DataInputStream:
DataOutputStream:
4..内存操作流(byte[]数组的缓存区流):它类似于StringBuffer
ByteArrayOutputStream:
ByteArrayInputStream:
5.打印流:
1.分类:
1).字节流:PrintStream: (System.out)
2).字符流:PrintWriter:
2.特点:
1).只能操作目的地,不能操作数据。
2).可以操作任意类型的数据。
3).如果启动了自动刷新,能够自动刷新。
4).可以操作文件的流
6.三种方式实现接收控制台数据:
1.Scanner:
2.main()方法形参;
3.System.in: System.in --> 转换流 --> 带缓冲的字符流
7.随机访问流:
RandomAccessFile:
1).获取文件指针:getFilePointer();
2).设置文件指针:seek();
8.序列化流:
1.序列化流:ObjectOutputStream:
2.反序列化流:ObjectInputStream:
3.注意:需要被序列化的类,必须实现接口:Serializable
4.为了控制版本号,建议定义成员变量:serialVersionUID设定版本号;
5.使用transient关键字声明不需要序列化的成员变量;
9.Properties类:
1.它本质上是一个Map集合,直接继承自:Hashtable;
2.它结合IO流,可以读写配置文件中的属性信息;
3.读取配置文件:load(Reader reader):
4.写入配置文件:store(Writer out,String str):
10.JDK7的NIO:
Path:与平台无关的路径。
Paths:包含了返回Path的静态方法。
public static Path get(URI uri):根据给定的URI来确定文件路径。
Files:操作文件的工具类。提供了大量的方法,简单了解如下方法
public static long copy(Path source, OutputStream out) :复制文件
public static Path write(Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options):
把集合的数据写到文件。