黑马程序员-IO流 03

来源:互联网 发布:python工厂模式 编辑:程序博客网 时间:2024/06/05 17:43
----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

1.File将文件系统中的文件和文件夹封装成了对象。提供了更多的属性和行为可以对这些文件和文件夹进行操作。这些是流对象办不到的,因为流只操作数据。1.1 静态成员变量static String separator //与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。 String s = File.separator;// 跨平台性  windows\  Linux/   

static String pathSeparator  // 与系统有关的路径分隔符,为了方便,它被表示为一个字符串。 String w = File.pathSeparator;  //跨平台性 windows ;  Linux :1.2 构造方法File(String pathname) 字符串格式的路径File f = new File("c:"+File.separator+"windows");

File(String parent, String child) 字符串类型的父路径 ,子路径File f1 = new File("c:","windows");

File(File parent, String child) File类型父路径,字符串类型子路径        File f2 = new File("c:");//可以使用File中的类,单独的操作父路径        File f3 = new File(f2,"windows");1.3 File类常见方法:1,创建。         boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false         和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。          boolean   mkdir():创建文件夹。         boolean   mkdirs():创建多级文件夹。2,删除。         boolean    delete():删除失败返回false。如果文件正在被使用,则删除不了返回false不走回收站,直接从硬盘上删除,小心一点         void   deleteOnExit();在程序退出时删除指定文件。  3,判断。         boolean    exists() :判断文件是否存在.         isFile():判断是否是一个标准文件         isDirectory();判断是否是一个目录(文件夹)         isHidden();判断是否是一个隐藏文件         isAbsolute();判断是否是绝对路径名 4,获取信息。获取File对象封装的路径下的全部文件和文夹,可以获取到隐藏的文件(a),String[] list()(b),File[] listFiles() 获取File对象中的全部文件盒文件夹,返回值是File类型的数组

 File[]

listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

         getName():获取文件名           getPath():获取文件的相对路径         getParent():获取文件所在绝对路径的父目录,如果获取的是相对路径,返回null         getAbsolutePath()获取文件的绝对路径         long  lastModified() 返回此抽象路径名表示的文件最后一次修改的时间         long  length() 返回由此抽象路径名表示的文件长度 练习:File类中方法的应用
import java.io.*;  class FileDemo  {           public static void main(String[] args) throws IOException  {                     method_5();           }              public static void method_5( )  {                     File f1 = new File("c:\\Test.java");                     File f2 = new File("d:\\hahah.java");                   sop("rename:"+f1.renameTo(f2));//重命名此抽象路径的文件名 f1移到f2,内容不变,名字改为f2  修改文件名,修改后的不在同一目录,有剪切效果         }              public static void method_4 ( )  {                     File f = new File("file.txt");                        sop("path:"+f.getPath());//返回指定文件的相对路径  获取封装的路径                   sop("abspath:"+f.getAbsolutePath());//返回指定文件的绝对路径                     sop("parent:"+f.getParent());//该方法返回的是绝对路径中的父目录。如果获取的是相对路径,返回null。                                                                                    //如果相对路径中有上一层目录(day20\\file2.txt)那么该目录就是返回结果。           }                     public static void method_3 ( )throws IOException  {                     File f = new File("d:\\java1223\\day20\\file2.txt");                        //f.createNewFile( );//创建指定路径文件                        //f.mkdir( );//创建指定路径文件夹       //记住在判断文件对象是否是文件或者目的时,必须要先判断该文件对象封装的内容是否存在。//通过exists判断。                     sop("dir:"+f.isDirectory( ));                     sop("file:"+f.isFile( ));                        sop(f.isAbsolute( ));  //true 绝对路径  带盘符         }            public static void method_2 ( ) {                     File f = new File("file.txt");                        //sop("exists:"+f.exists());         //是否存在                      //sop("execute:"+f.canExecute());  //是否可执行                      //创建文件夹                     File dir = new File("abc\\kkk\\a\\a\\dd\\ee\\qq\\aaa");                        sop("mkdir:"+dir.mkdirs( ));           }             public static void method_1( )throws IOException  {                     File f = new File("file.txt");                     //sop("create:"+f.createNewFile());                //sop("delete:"+f.delete());//删除指定文件,如果该文件正在使用,则删除失败         }              public static void consMethod()  {               //将a.txt封装成file对象。可以将已有的和未出现的文件或者文件夹封装成对象。                   File f1 = new File("a.txt");                        File f2 = new File("c:\\abc","b.txt");                        File d = new File("c:\\abc");                     File f3 = new File(d,"c.txt");                        File f4 = newFile("c:"+File.separator+"abc"+File.separator+"zzz"+File.separator+"a.txt");                     //separator为跨平台目录分隔符 \           }              public static void sop(Object obj)  {                     System.out.println(obj);           }  }  


递归获取所有目录
//获取一个路径下的全部内容,包含子目录import java.io.*;public class AllListFiles {public static void main(String[] args) {getFile(new File("c:\\demo"));}public static void getFile(File file){//获取demo下的全部内容File[] files = file.listFiles();for(File f : files){//迭代的过程中,获取到得内容,有文件,和文件夹,如果遍历到得是文件夹//进去文件夹继续获取这个文件夹中的内容if(f.isDirectory())getFile(f);//自己调用自己,递归elseSystem.out.println(f);}}}


递归,其实就方法的自身调用,自己调用自己
什么时候用递归,注意事项
    当你完成一个事情的功能的时候,发现功能的主体,没有发生变化,每次运行的时候,参数总是在发生变化,考虑使用递归实现。
注意:递归要有条件(结束的条件)
      递归的次数不要过大,会导致栈内存溢出错误StackOverflowError
复制单级文件夹/* * 使用java语言进行目录的复制,单级文件夹 * 数据源是什么 * 目的是什么 */import java.io.*;public class CopyDir {public static void main(String[] args) {copy(new File("c:\\demo"),new File("d:\\"));}//定义函数实现文件夹复制,接收2个File类型的对象,一个数据源,一个是目的public static void copy(File source,File target){//1. 按照数据源的文件夹名,在数据目的端,创建同样的文件夹//获取数据源的文件夹名字String soruceName = source.getName();//将文件夹名soruceName,和目的对象d:\\   target组合File对象File fileTarget = new File(target,soruceName);fileTarget.mkdirs();//创建多级目录//以上功能,实现了目的端的文件夹创建//soruce=c:\\demo  fileTarget = d:\\demo//获取到c:\\demo下的全部文件File[] file = source.listFiles();for(File f : file){//获取到得c:\\demo下的文件,拿文件名String fileName = f.getName();// f是c:\\demo下的全部文件// getName()方法获得全部的文件名// 用文件名和目标文件夹fileTarget,组合承诺File对象/*System.out.println(f);System.out.println(new File(fileTarget+fileName));*/copyFile(f,new File(fileTarget+File.separator+fileName));}}//定义方法,使用IO中的字节流复制文件public static void copyFile(File source,File target){//IO流对象,封装FileFileInputStream fis = null;FileOutputStream fos = null;try{fis = new FileInputStream(source);fos = new FileOutputStream(target);int length = 0 ;byte[] buf = new byte[1024];while((length = fis.read(buf))!=-1){fos.write(buf, 0, length);}}catch(IOException e){e.printStackTrace();throw new RuntimeException("文件复制失败");}finally{try{if(fos!=null)fos.close();}catch(IOException e){throw new RuntimeException("写出文件关闭失败");}try{if(fis!=null)fis.close();}catch(IOException e){throw new RuntimeException("读取文件关闭失败");}}}}


练习
/* * 指定一个目录,找出这个目录中,所有的文件名包含abc的文件 * 结果看到得是整个的文件名 * File中的功能 * 递归 */import java.io.*;public class GetFleName {public static void main(String[] args) {getFileName(new File("c:\\demo"));}   /*    * 定义方法,实现功能,接受一个File对象    * 制定的目录,参数传递    */public static void getFileName(File file){//获取指定目录下的全部内容,listFiles()获取一个数组File[] files = file.listFiles();for( File f : files){//判断是否是目录,如果是目录,就递归进去if(f.isDirectory()){getFileName(f);}else{//不是路径,是一个文件,获取文件名吧String name = f.getName();if(name.contains("abc")){System.out.println(f);//获取到了包含abc的全路径文件if(name.endsWith(".txt")){//如果是文本文件,可以进行内容包含字符的搜索//通过IO流,读取内容,进行判断getChar(f);}}}}}public static void getChar(File file){BufferedReader bfr = null;try{bfr = new BufferedReader(new FileReader(file));String line = null;while((line = bfr.readLine())!=null){//读取文本一行,进行判断看看是否包含指定字符if(line.contains("黑马")){System.out.println("包含的文件是"+file);break;}}}catch(IOException e){e.printStackTrace();throw new RuntimeException("文件读取失败");}finally{try{if(bfr!=null)bfr.close();}catch(IOException e){}}}}

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

 
0 0
原创粉丝点击