黑马程序员——Java学习总结:IO常用方法练习

来源:互联网 发布:三挫仑在淘宝上叫什么 编辑:程序博客网 时间:2024/05/29 14:14

昨天写过了IO学习总结,还是感觉对知识掌握理解的不够透彻,今天特意进行的IO部分的练习,个人感觉还是写写代码、看代码、看注释、查API学习的比较快,并掌握的表牢靠。现将练习整理如下。路过高手请赐教。

File类常见方法练习:

package day21_IO;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;public class FileTest01 {    public static void main(String[] args) throws IOException {        //创建File实例的方法 1        File file=new File("E:\\abc\\abc.txt");        File file1=new File("E:\\abc\\mkdir");        //创建File实例的方法 2        File file2=new File("E:\\abc", "hello.txt");        File file3=new File("abc.txt");        File file4=new File("E:\\abc\\d\\e\\f");        //在多系统上扩展        File file5=new File("E:"+File.separator+"abc");        //File的常见操作方法:        //1.获取名称        String strName=file.getName();        System.out.println("名称:"+strName);        //2.获取大小        long fileSize=file.length();        System.out.println("大小:"+fileSize); //文件存在,返回文件长度,文件不存在,所以返回0        //3.获取类型        //因为类型不定,无法获取类型        //4.获取目录        String strParent=file.getParent();        System.out.println("目录:"+strParent);        //5.获取绝对路径        String strAbsolutePath=file3.getAbsolutePath();        System.out.println("绝对地址:"+strAbsolutePath);        //6.获取路径        String strPath=file3.getPath();        System.out.println("地址:"+strPath);        //7.获取最后一次修改时间        long lastModify=file.lastModified();        Date date=new Date(lastModify);        //      DateFormat df=DateFormat.getDateInstance(DateFormat.FULL);        //      String strDate=df.format(date);        //      System.out.println("上次修改的时间"+strDate);        SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); //自定义日期格式        String strDate=sdf.format(date);        System.out.println("上次修改的时间"+strDate);        //8.文件是否隐藏        boolean isHidden=file.isHidden();        System.out.println("隐藏"+isHidden);        //9.创建文件        boolean flag=file2.createNewFile(); //已经存在则不能创建,返回false,不存在创建,返回true        System.out.println("创建文件"+flag);        //10.删除文件        boolean flag1=file2.delete();        System.out.println("删除文件"+flag1);        //11.创建文件夹        boolean flag2=file1.mkdir();        System.out.println("创建文件:"+flag2);        //12.创建多级文件夹        boolean flag3=file4.mkdirs();        System.out.println("创建多级文件:"+flag3);        //13.删除文件夹        boolean flag4=file1.delete();        boolean flag5=file4.delete();   //删除时候必须保证文件夹下无内容        System.out.println("删除文件:"+flag4);        System.out.println("删除文件:"+flag5);        //14.getFreeSpace()  getTotalSpace() getUsableSpace()          File file14=new File("E:\\");        long freeSpace=file14.getFreeSpace(); //得到指定目录的可用空间        System.out.println(freeSpace);        long totalSpace=file14.getTotalSpace(); //得到指定目录的总共空间        System.out.println(totalSpace);        long usableSpace=file14.getUsableSpace(); //得到指定目录的已用空间        System.out.println(usableSpace);        //15.获取指定文件下文件和文件夹的名称        File file15=new File("E:\\");        String[] arrs=file15.list();        for(String str:arrs){            System.out.println("文件名:"+str);        }        File[]  arrayFile=file15.listFiles();        for(File f:arrayFile){            System.out.println("文件夹名:"+f);        }        //16.获得指定文件夹下的.txt文件        File file16=new File("E:\\");        getSuffix(file16,".txt");        //17.获得部分名称的文件        File file17=new File("E:\\");        getFileByPartOfName(file17,"hello");        //18.文件过滤器 FileFilter        File file18 = new File("E:\\");        File[] arrsfile=file18.listFiles(new MyFileFilter(".txt"));        for(File f:arrsfile)            System.out.println("FileFilter: "+f);        //19 获取指定目录下的内容,包含子目录下内容。 递归思想        File file19=new File("E:\\abc");        getFileFromDir(file19);    }    private static void getFileFromDir(File file19) {        File[] arrfile=file19.listFiles();        for(File file:arrfile){            if (file.isDirectory()) {                System.out.println("文件夹:"+file);                getFileFromDir(file);            }else {                System.out.println("文件:"+file);            }        }    }    private static void getFileByPartOfName(File file, String string) {        String[] arrs=file.list(new FilterByPartOfName(string));        for(String str:arrs){            System.out.println(string+"文件:"+str);        }    }    private static void getSuffix(File file,String string) {        String[] arrs=file.list(new FilterBySuffix(string));        for(String str:arrs){            System.out.println(".txt文件:"+str);        }    }}----------package day21_IO;/*** * FilenameFilter文件名过滤器 * 用于过滤文件名中包含的特定字符串的的文件 */import java.io.File;import java.io.FilenameFilter;public class FilterByPartOfName implements FilenameFilter {    String name;    public FilterByPartOfName(String name) {        super();        this.name = name;    }    public boolean accept(File arg0, String arg1) {        return arg1.contains(name);    }}----------package day21_IO;import java.io.File;import java.io.FilenameFilter;/*** * 文件名过滤器,可用于过滤特定的文件类型。 * @author hsf * */public class FilterBySuffix implements FilenameFilter {    String name;    /**     * @param name     */    public FilterBySuffix(String name) {        super();        this.name = name;    }    public boolean accept(File arg0, String arg1) {        return arg1.endsWith(name);    }}----------package day21_IO;import java.io.File;/*** * FileFilter 文件过滤器,既可以过滤文件,也可以过滤文件名, * 过滤文件时使用File.getName().endwith(".txt"); * file.isFile();文件 * file.isDirectory(); 是文件夹 */import java.io.FileFilter;public class MyFileFilter implements FileFilter {    String condition;    public MyFileFilter(String condition) {        super();        this.condition=condition;    }    public boolean accept(File passName) {        return passName.isDirectory();    }}

代码运行自己需要修改File中的路径,指定为当前电脑上的路径。


需求:删除一个带内容的文件夹,内容可以是文件,也可是是文件夹。
分析:
1.指定file
2.如果文件夹中不空,文件夹是不允许删除的,所以必须先删除文件夹中的文件。
3.文件夹是嵌套的,需要使用递归的思想解决。
4.迭代过程中,是文件夹进行函数递归调用,不是文件夹进行删除,迭代到最后一个文件夹后,依次删除文件夹。

package day21_IO;import java.io.File;/*** * @author hsf * 需求:删除一个带内容的文件夹,内容可以是文件,也可是是文件夹。 * 分析:1.指定file *      2.如果文件夹中不空,文件夹是不允许删除的,所以必须先删除文件夹中的文件。 *      3.文件夹是嵌套的,需要使用递归的思想解决。 *      4.迭代过程中,是文件夹进行函数递归调用,不是文件夹进行删除,迭代到最后一个文件夹后,依次删除文件夹。 */public class FileTest02 {    public static void main(String[] args)  {        File dir=new File("E:\\a");         deleteFile(dir);    }    private static void deleteFile(File dir) {        File[] arrsFile=dir.listFiles();//获取文件夹中的内容,存储到File数组中,便于遍历。        for(File f:arrsFile){   //执行遍历            if (f.isDirectory()) {  //是文件夹进行迭代                deleteFile(f);            }else {                System.out.println("删除file:"+f.delete()); //不是文件夹进行删除            }        }        System.out.println("删除dir:"+dir.delete()); //删除文件夹          }   }

需求:
获取指定文件夹下的所有.txt文件,包括子文件夹。

思路分析:
1.包含子目录,用递归函数。
2.获取指定文件,用顾虑器FileFilter
3.迭代循环,若是文件夹,进行函数递归,若是文件使用过滤区过滤,添加到集合中。

package day21_IO;import java.io.File;import java.util.ArrayList;import java.util.List;/*** * 获取指定文件夹下的所有.txt文件,包括子文件夹。 * @author hsf * 思路分析: *  1.包含子目录,用递归函数。 *  2.获取指定文件,用顾虑器FileFilter *  3.迭代循环,若是文件夹,进行函数递归,若是文件使用过滤区过滤,添加到集合中。 * */public class Test03 {    public static void main(String[] args) {        //1.定义集合存储.txt文件        List<File> list=new ArrayList<File>();        //2.指定目录        File file=new File("E://A");        //3 .定义过滤器        MyFilterBySuffix filter=new MyFilterBySuffix(".txt");        recution(list,file,filter);        show(list);    }    //4 .定义递归函数    private static void recution(List<File> list,File file,MyFilterBySuffix filter){        File[] arrsFile=file.listFiles();        for(File f : arrsFile) {            if (f.isDirectory()) {                recution(list, f, filter);  //执行函数递归调用            }else {                filter.accept(f);   //进行过滤文件                list.add(f);            }        }    }    //输出list验证结果    private static void show(List<File> list){        for(File file:list){            System.out.println(file);        }    }}

package day21_IO;import java.io.File;import java.io.FileFilter;/*** * 定义文件夹过滤器 * @author hsf * */public class MyFilterBySuffix implements FileFilter {    String str=null;    /**     * @param str过滤条件     */    public MyFilterBySuffix(String str) {        super();        this.str = str;    }    public boolean accept(File file) {        return file.getName().endsWith(str);    }}

将数据写入文件中,并处理异常!

package day21_IO;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/** * 将数据写入文件中,并处理异常 * 步骤: * 1 指定目录 * 2 创建字节输出流 * 3 调用字节输出流写的功能 * 4 释放资源 *  * 注意 异常的处理 * @author hsf * */public class OutputStream_Test01 {    public static void main(String[] args) {        //1 指定目录        File dir=new File("E://ab");        if (!dir.exists()) {            dir.mkdir();        }        FileOutputStream fos=null;        try {            //2 创建字节输出流,必须指出输出流目的地。可能存在文件不存异常FileNotFoundException,原因:该文件被系统保护,不能访问。该文件是一个目录,无法写入            fos=new FileOutputStream("E://ab//fos.txt");            //3 调用字节输出流写功能,可能存在的写入失败异常,例如硬盘写满没有空间。            fos.write("abcdefg".getBytes());        }  catch (IOException e) {            System.out.println(e.toString()+"----");        }finally{            if (fos!=null) {                try {                    fos.close();                } catch (IOException e) {                    throw new RuntimeException(""+e);                }            }        }    }}

练习完成,分析注释都比较详细。

0 0
原创粉丝点击