黑马程序员——Java学习总结:IO常用方法练习
2015-07-20 19:09
411 查看
昨天写过了IO学习总结,还是感觉对知识掌握理解的不够透彻,今天特意进行的IO部分的练习,个人感觉还是写写代码、看代码、看注释、查API学习的比较快,并掌握的表牢靠。现将练习整理如下。路过高手请赐教。
File类常见方法练习:
代码运行自己需要修改File中的路径,指定为当前电脑上的路径。
需求:删除一个带内容的文件夹,内容可以是文件,也可是是文件夹。
分析:
1.指定file
2.如果文件夹中不空,文件夹是不允许删除的,所以必须先删除文件夹中的文件。
3.文件夹是嵌套的,需要使用递归的思想解决。
4.迭代过程中,是文件夹进行函数递归调用,不是文件夹进行删除,迭代到最后一个文件夹后,依次删除文件夹。
需求:
获取指定文件夹下的所有.txt文件,包括子文件夹。
思路分析:
1.包含子目录,用递归函数。
2.获取指定文件,用顾虑器FileFilter
3.迭代循环,若是文件夹,进行函数递归,若是文件使用过滤区过滤,添加到集合中。
将数据写入文件中,并处理异常!
练习完成,分析注释都比较详细。
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: " 4000 +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); } } } } }
练习完成,分析注释都比较详细。
相关文章推荐
- 如何优雅地处理前端异常?
- sql2005 附加数据库出错(错误号:5123)解决方法
- C#异常处理详解
- C#中File类的文件操作方法详解
- asp #include file 与 #include virtual 的区别小结第1/2页
- PHP file_exists问题杂谈
- css美化input file按钮的代码方法
- 改变文件域的样式实现思路同时兼容ie、firefox
- How to Auto Include a Javascript File
- JS异常处理的一个想法(sofish)
- 清理SQL Server 2008日志文件Cannot shrink log file 2 的解决方案
- Locate a File Using a File Open Dialog Box
- Save a File Using a File Save Dialog Box
- 基于java file 文件操作operate file of java的应用
- PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
- php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
- PHP 得到根目录的 __FILE__ 常量
- PHP如何抛出异常处理错误
- 解析php dirname()与__FILE__常量的应用
- PHP中的错误处理、异常处理机制分析