IO流(File类和字节流) 作者:一衡 今日主要学习了file类,和字节流的读取和复制,最难的案例为复制文档. 一、File类 1、构造方法 File(String pathname) :将一个字符串路径封装成File对象 File(String parent,String child):传入一个父级路径和子级路径 File(File parent,String child):传入一个File类型的父级路径和子级路径 2、删除功能 boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false boolean mkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false boolean mkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false boolean delete():删除文件或者删除单级文件夹。 删除文件只能一级一级删除。 3、判断功能 boolean exists():判断指定路径的文件或文件夹是否存在。 boolean isAbsolute():判断当前路路径是否是绝对路径。 boolean isDirectory():判断当前的目录是否存在。 boolean isFile():判断当前路径是否是一个文件。 boolean isHidden():判断当前路径是否是隐藏文件。 4、获取功能和修改功能 File getAbsoluteFile():获取文件的绝对路径,返回File对象 String getAbsolutePath():获取文件的绝对路径,返回路径的字符串 String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径 File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径 String getName():获取文件或文件夹的名称 String getPath():获取File对象中封装的路径 long lastModified():以毫秒值返回最后修改时间 long length():返回文件的字节数 boolean renameTo(File dest): 将当前File对象所指向的路径 修改为 指定File所指向的路径。 5、其他功能 String[] list():以字符串数组的形式返回当前路径下所有的文件和文件夹的名称 File[] listFiles():以File对象的形式返回当前路径下所有的文件和文件夹的名称 static File[] listRoots():获取计算机中所有的盘符 主要的代码 File很多的查找和统计,复制主要是以递归思想所表现的 static long sum = 0 ; public static void printFile(File f, String s1, String s2) { if (f.isDirectory()) { File[] arr = f.listFiles(); for (File file : arr) { if (file.isFile()) { if (file.getName().endsWith(s1) || file.getName().endsWith(s2)) { long chang = file.length(); sum += chang ; System.out.println(file.getName()); } } else { //操作索引的子文件夹 printFile(file, s1, s2); } } } } 其中String s1 String s2 可以用String... s 替换可以查找多个后缀名的文件。 二、字符流和字节流 字符流前面IO已经学习 字符流 字节流代码: public static void main(String[] args) throws IOException { //创建字符输入流对象 FileReader fr = new FileReader("IODemo.java"); //创建字符输出流对象 FileWriter fw = new FileWriter("d:\\IODemo.java"); int len;//用于存储读到的字符个数 char[] chs = new char[1024]; while((len = fr.read(chs)) != -1) { fw.write(chs,0,len); fw.flush(); } //释放资源 fw.close(); fr.close(); } } 字节流可以操作所有类型的文件,因为所有的文件在计算机中都是以字节形式存储 而字符流只能用来操作纯文本类型的文件,不能操作字节类型的文件 复制文档案例: public class Demo { public static void main(String[] args) throws IOException { File scr = new File("F:\\PGP"); System.out.println(scr.getName()); File dir = new File("D:\\"); dir.mkdirs(); copy(scr,dir); } public static void copy(File scr ,File dir) throws IOException { if(scr.isDirectory() && dir.exists()){ //创建目标目录 File newDir = new File(dir , scr.getName()); //如果不存在文件 if(!newDir.exists()) { newDir.mkdir(); } File[] files = scr.listFiles(); for (File file : files) { if (file.isFile()) { //创建输入流 FileInputStream fr = new FileInputStream(file); //创建输出流想要的路径加上文件名 FileOutputStream fw=new FileOutputStream(new File(newDir,file.getName())); //字节输入 byte[] bys = new byte[1024]; int len ; while((len = fr.read(bys)) != -1){ fw.write(bys, 0, len); } fr.close(); fw.close(); }else if(file.isDirectory()){ //递归 copy(file, newDir); } } } } }
|