本文主要是对Java中IO知识点进行整理和学习。
一言以蔽之,IO 从名字上看input+output,输入到输出之间的管道就是io,主要就是学习各种流(字节流,字符流),最后会加入conmonsIO ,使用它简化我们的操作,提高效率。
文章目录
1. IO介绍
相信大家刚开始就会被输入和输出给搞晕了,这个in和out主要是相对于程序,由文件进来是输入,由程序出去是输出,一切以程序为中心!
程序读取,程序写出,其实就是文件的拷贝。
java对io进行了大量的封装,我们主要学习这些类,当我们忘记了看看API就可以了
1.1分类有哪些呢?
按照功能来分
按照处理来分
1.2 如何看API
第一:看一看类的继承体系
第二:找构造器
- 有构造器
因为权限: API>DEFAULT
- 无构造器:要么是工具类,要么是静态方法,可以直接点出来
第三:方法(形参,功能,返回值)
1.3 Linux和win 的不同—名称分隔符的困惑
我们在win开发,但往往会在linux上运行,两个平台 的文件管理系统事不同 的,它主要体现在名称分隔符上,例如
public static void main(String[] args) {
String path = "G:\\Major\\Eclipse\\coding\\Java_300\\images\\back1.jpg";
System.out.println(File.separator);
//1.习惯培养,使用左斜杠/
path = "G:/Major/Eclipse/coding/Java_300/images/back1.jpg";
//2.常量拼接
path = "D:"+File.separator+"java300";
}
1.4构建file对象
第一种直接丢名称,第二种父子名称,第三种父对象,子名称
1.5掌握基本方法
2 .如何操作文件夹
-
mkdir 必须保证父目录存在
-
mkdirs 如果上一级目录不存在,它就自动创建
-
推荐使用后者,一劳永逸
public static void main(String[] args) { File dir = new File("G:/Major/Eclipse/coding/Java_300/dir/text"); // 创建目录 boolean flag = dir.mkdir(); System.out.println(flag); flag = dir.mkdirs(); System.out.println(flag);
-
list 列出下一级名称
-
listFiles 列出下级File对象
public static void main(String[] args) { File dir = new File("G:/Major/Eclipse/coding/Java_300"); // 创建目录 //boolean flag = dir.mkdir(); //System.out.println(flag); //flag = dir.mkdirs(); //System.out.println(flag); //获取下级名称 String[] subNames = dir.list(); for (String s:subNames){ System.out.println(s); } //获取下级对象 File[] subFiles = dir.listFiles(); for (File s :subFiles){ System.out.println("下级对象"+s); } //所以盘符 File[] roots= dir.listRoots(); for (File r:roots){ System.out.println("盘符"+r); } }
还记得我们之前学过的递归吗?
就是自己调用自己,注意不要忘了递归头需要有结束的条件。
我们接下来就要用递归来打印文件的子孙及目录和文件的名称
public static void main(String[] args) {
File dir = new File("G:/Major/Eclipse/coding/Java_300");
printName(dir,0);
}
//打印所有目录及文件名称
/**
*
* @param src
* @param deep文件的深度,更加有层次感
*/
public static void printName(File src,int deep){
for(int i=0;i<deep;i++){
System.out.print("-");
}
System.out.println(src.getName());
if(!src.exists()||src==null){
return;
}else if(src.isDirectory()){
for (File s : src.listFiles()){
//此处不是打印,继续递归,如果为零就直接返回了
printName(s,deep+1);
}
}
}
同理可以统计文件夹的大小等等