IO流(一)和深入递归

IO流(一)
1、什么是IO流?
IO流是java提供用来实现输入/输出机制的基础,通过输入机制,程序可以读取磁盘、光盘等存储设备上的数据;通过输出机制,允许程序将数据输出到磁盘、光盘等存储设备中
2、File类
2.1 File类简介
File类是java.io包下的用来操作文件和目录的类。File类可以新建、删除文件和目录,但是不能访问文件内容本身,如果需要访问文件内容本身,则需要使用IO流。
2.2 File类的初始化
public File(String pathname); 以pathname为路径创建File对象;
public File(String parent, String child); 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
public File(File parent, String child); 根据 parent 表示的File对象和 child 路径名字符串创建一个新 File 实例
2.3 File类的常用方法
2.3.1 访问文件名和文件路径的相关方法
● String getName(); 返回此File对象所表示的文件名或路径名
● String getPath(); 返回此File对象所对应的路径名
● Flie getAbsoluteFile(); 返回此对象所对应的绝对路径所对应的File对象
● String getParent(); 返回此File对象所对应的目录的父目录名
● boolean renameTo(File newName); 重命名此如果重命名成File对象所对应的文件或目录,功,则返回true,否则返回false
2.3.2 文件检测的相关方法
● boolean exists(); 判断File对象所对应的文件或目录是否存在
● boolean canWrite(); 判断File对象所对应的文件和目录是否可写
● boolean canRead(); 判断File对象所对应的文件和目录是否可读
● boolean isFile(); 判断File对象所对应的是否是文件,如果是文件则返回true,如果是目录则返回false
● boolean isDirectory(); 判断File对象所对应的是否是目录,如果是目录则返回true,如果是文件则返回false
● boolean isAbsolute(); 判断File对象所对应的文件或目录是否是绝对路径。
2.3.3 获取文件信息的相关方法
● long lastModified(); 返回文件的最后修改时间
● long length(); 返回文件内容的长度
2.3.4 操作文件的相关方法
● boolean createNewFile(); 当此File对象所对应的文件不存在时,该方法将新建一个新文件,如果创建成功则返回true,否则返回false
● boolean delete(); 删除File对象所对应的文件或路径,如果路径下有文件则无法删除
● static File createTempFile(String prefix, String suffix); 在默认的临时文件目录中创建一个临时的空文件,使用给定的前缀。系统生成的随机数和给定的后缀作为文件名。
● static File createTempFile(String prefix, String suffix, File directory); 在directory所指定的目录中创建一个临时的空文件。
● void deleteOnExit(); 注册一个删除钩子,当Java虚拟机退出时,删除File对象所对应的文件和目录。
2.3.5 操作目录的相关方法
● boolean mkdir(); 创建一个File对象所对应的目录,如果成功则返回true。调用该方法时,File对象必须是一个路径。
● boolean mkdirs(); 效果等同于mkdir()方法,只是mkdir()只会创建一级路径,mkdirs()会创建多级
● String[] list(); 列出File对象的所有子文件名和路径名,返回String数组
● File[] listFiles(); 列出File对象的所有子文件和路径所对应的File对象数组
● static File[] listRoots(); 列出系统所有的根路径
2.4 File类的文件过滤器
FileFilter是一个接口,如果要使用要实现它的方法
public boolean accept(File pathname) {
return true;
}
如果返回false的话,就过滤掉这个文件或者目录,如果返回true ,就代表这个文件或者目录加入到数组中去。
注意
匿名内部类访问外部的局部变量时,局部变量需要加final
Windows的路径分隔符使用反斜杠(\),为Java程序中反斜杠表示转义字符,所以应该使用两条反斜杠,如果D:\Java\a.txt,或者直接使用斜杠(/)也可以
深入递归
1、递归的应用
1.1二分查找法的递归实现
public static int search(int[] arr, int begin, int end, int value){
int middle = (begin + end) / 2;
if(arr[middle] == value){
return middle;
} else if(begin > end){
return -1;
} else if(arr[middle] > value){
return search(arr, begin, value);
} else if(arr[middle] < value){
return search(arr, middle + 1, end, value);
}
return -1;
}
1.2 汉诺塔问题
public static void hnt(int number, String from, String middle, String to){
if(number == 1){
System.out.println(“第1个盘子从” + from + “移动到” + to);
} else {
hnt(number - 1, from, to, middle);
System.out.println(“第” + (number) + “个盘子从” + from + “移动到” + to);
hnt(number - 1, middle, from, to);
}
}
2.归并排序
2.1 归并两个有序数组的实现
public static void main(String[] args) {
int[] arr1 = {1,2,4,10,14};
int[] arr2 = {7,11,16,20};
//归并排序
int[] allarr = new int[arr1.length + arr2.length];
for(int i = 0, j = 0, k = 0; i < arr1.length || j < arr2.length; k++){
if(j == arr2.length || (i < arr1.length && arr1[i] <= arr2[j])){
allarr[k] = arr1[i];
i++;
} else if(i == arr1.length || (j < arr2.length && arr1[i] > arr2[j])){
allarr[k] = arr2[j];
j++;
}
}
for(int i = 0; i < allarr.length; i++){
System.out.print(allarr[i] + ” “);
}
}
2.2 归并排序的实现
public static void guibinSort(int[] arr, int[] array, int begin, int end){
if(begin == end){
return;
}
int m = (begin + end) / 2;
guibinSort(arr, array, begin, m);
guibinSort(arr, array, m+1, end);
//合并
System.out.println(“归并:” + begin + “-” + m + ” ” + (m+1) + “-” + end);
for(int i = begin, j = m + 1, index = 0; i <= m || j <= end; index++){
if(j > end || (i <= m && arr[i] < arr[j])){
array[index] = arr[i];
i++;
} else if(i > m || (j <= end && arr[i] >= arr[j])){
array[index] = arr[j];
j++;
}
}
//将array中排序好的数据更新到arr数组中
for(int i = begin, j = 0; i <= end; i++, j++){
arr[i] = array[j];
}
}

你可能感兴趣的:(io流,java,存储,清茶)