一、io流的主要内容
1.java.io.File类的使用(计算机操作系统中的文件盒文件夹)
2.IO原理及流的分类
①文件流(数据流的读写都是基于文件的操作)
FileInputStream / FileOutputStream / FileReader / FileWriter
②缓冲流(数据流的读写都是基于内存的操作)
BufferedInputStream / BufferedOutputStream / BufferedReader / BufferedWriter
③转换流
InputStreamReader / OutputStreamWriter
④标准输入/输出流
⑤打印流(了解)
PrintStream / PrintWriter
⑥数据流(了解)
DataInputStream / DataOutputStream
⑦对象流---涉及到序列化、反序列化(把一个对象转化为一个数据流进行读写)
ObjectInputStream / ObjectOutputStream
⑧随机存取文件流
RandomAccessFile
二、File类
1.java.io.File类:文件和目录路径名的抽象表示形式,与平台无关。
2.File能创建、删除、重命名文件和目录,但File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
3.File对象可以作为参数传递给流的构造函数。
4.File类的常见构造方法:
①public File(String pathname)
以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。
②public File(String parent,String child)
以parent为父路径,child为子路径创建File对象。File的静态属性String separator存储了当前系统的路径分隔符。在UNIX中,此字段为‘/’,在Windows中,为'\\'。
package day17; import java.io.File; public class Test { public static void main(String[] args){ File f = new File("D:\\Test\\tt.txt");//这个时候对象f就是tt.txt文件 // File f1 = new File("D:\\Test","Test\\tt.txt");//这个f1也是tt.txt文件,这种写法较少 // File f2 = new File("D:/Test/tt.txt");//这样写也可 // File f3 = new File("D:" + File.separator + "D:\\Test\\tt.txt");//这样写也可 //注意,\在文件中是路径的分隔符,但是在java编程中,\是转义符,\\才是文件分隔符.也可以使用File。separator作为文件分隔符 } }
5.File类代表与平台无关的文件和目录。
6.File能新建、删除、重命名文件和目录,但File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
1 package day17; 2 3 import java.io.File; 4 import java.io.IOException; 5 6 public class Test { 7 public static void main(String[] args){ 8 File f = new File("D:\\Test\\tt.txt");//这个时候对象f就是tt.txt文件 9 // File f1 = new File("D:\\Test","Test\\tt.txt");//这个f1也是tt.txt文件,这种写法较少 10 // File f2 = new File("D:/Test/tt.txt");//这样写也可 11 // File f3 = new File("D:" + File.separator + "D:\\Test\\tt.txt");//这样写也可 12 File f4 = new File("D:\\Test"); 13 14 //注意,\在文件中是路径的分隔符,但是在java编程中,\是转义符,\\才是文件分隔符.也可以使用File。separator作为文件分隔符 15 16 System.out.println(f.getName());//获取文件名 17 System.out.println(f4.getName());//获取当前的文件名称 18 19 File f5 = new File("bin/day14/Test.java");//使用相对路径来创建File对象 20 21 System.out.println(f5.getPath());//获取当前文件或者文件夹的相对路径 22 System.out.println(f5.getAbsolutePath());//获取当前文件或者文件夹的绝对路径 23 24 System.out.println(f5); 25 System.out.println(f5.getAbsoluteFile());//返回一个用当前文件的绝对路径构建的File对象 26 27 System.out.println(f5.getParent());//返回当前文件或者文件夹的父级路径 28 29 f.renameTo(new File("D:\\Test\\tt1.txt"));//给文件或文件夹重命名 30 31 File f6 = new File("D:\\Test\\tt1.txt"); 32 System.out.println(f6.exists());//判断文件或者文件夹是否存在 33 34 File f7 = new File("D:\\Test\\tt1.txt"); 35 System.out.println(f7.canWrite());//判断文件是否可写 36 System.out.println(f7.canRead());//判断文件是否可读 37 38 System.out.println(f7.isFile());//判断当前的File对象是不是文件 39 System.out.println(f7.isDirectory());//判断当前的File对象是不是文件夹 40 41 System.out.println(f7.lastModified());//获取文件的最后的修改时间,返回的是一个毫秒数 42 43 System.out.println(f7.length());//返回文件的长度,单位是字节 44 45 File f8 = new File("D:\\Test\\tt2.txt"); 46 System.out.println(f8.exists());//判断是不是存在tt2.txt这个文件(判断文件是否存在) 47 if(!f8.exists()){//如果没有tt2.txt 48 try { 49 f8.createNewFile();//则创建一个tt2.txt(创建一个新的文件) 50 } catch (IOException e) { 51 // TODO Auto-generated catch block 52 e.printStackTrace(); 53 } 54 } 55 56 // f8.delete();//删除文件 57 58 // File f9 = new File("D:\\Test\\cc"); 59 // f9.mkdir();//创建单层目录,如果使用这样的方法创建多层目录需要一层一层的执行mkdir()方法 60 // File f10 = new File("D:\\Test\\a\\b\\c"); 61 // f10.mkdirs();//这个方法是直接创建多层目录 62 63 File f11 = new File("D:\\Test"); 64 String[] f1 = f11.list();//返回的是当前文件夹的子集的名称,包括目录和文件 65 for(String s : f1){ 66 System.out.println(s); 67 } 68 69 File[] fs = f11.listFiles();//返回的是当前文件夹的子集的File对象,包括目录和文件 70 for(File ff : fs){ 71 System.out.println(ff); 72 } 73 74 } 75 }
递归算法
package day17; import java.io.File; import java.io.IOException; public class Test { public static void main(String[] args){ //遍历d盘下的test文件,把test文件夹下所有的目录与文件全部遍历出来,不论层级有多深,要全部遍历出来 //需要使用递归的方式来实现 File f = new File("D:\\Test"); new Test().test(f); } /** * 递归遍历文件 * @param file * */ public void test(File file){ if(file.isFile()){ System.out.println(file.getAbsolutePath() + " 是文件"); }else{ System.out.println(file.getAbsolutePath() + " 是文件夹"); //如果是文件夹,这个文件夹里就可能有子文件夹或文件 File[] fs = file.listFiles();//获取当前文件夹下的子文件夹或者文件的file对象 if(fs != null && fs.length > 0){ for(File ff : fs){ test(ff);//递归 // if(ff.isFile()){//重复了上面的操作 // System.out.println(file.getAbsolutePath() + " 是文件"); // }else{ // System.out.println(file.getAbsolutePath() + " 是文件夹"); // }
} } } } }