A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© g207776411 中级黑马   /  2018-4-23 15:13  /  517 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-4-26 14:15 编辑

                                   Java-File类和字节字符流学习笔记
Day09_File类 ,字节流和字符流File类的概述和用法
        文件和目录路径名的抽象表示形式,File 类的实例不可变的                  
                 构造方法;            
                 只是单纯的创建了,但是没有在电脑中生成文件                 
                        File(File parent,String child)   传入代表文件夹的file对象,后面加上文件名               
                        File(String pathname)  直接传入绝对路径                       
                        File(String parent,String child) 传入文件夹的路径,传入文件夹名字
File的常见功能
创建文件
注意:传入一个多级路径时,路径的最后所指向的文件就是你要操作的文件
  • File a=new File(D:\\a\\c  文件的路径)(路径分为绝对路径和先对路径)


    • 绝对路径:系统路径
    • 相对的路径: 项目根目录



获取功能
  • File getAbsolueteFile() 获取文件的绝对值路径的file对象
  • String getAbsolutePath() 获取文件路径的字符串
  • String getParent()   获取父路径的字符串
  • File getParentFile()       获取父路径的file对象
  • String getName()  获取文件名或者目录名
  • String getPath();    获取创建File对象时保存的路径
  • long lasModified();  获取文件的创建时间
    long length();               获取文件的所占的字节数


修改功能
  • ​      boolean renameTo(File dest)  


判断功能
  
      * `boolean isDirectory();`  判断file对象是否是文件夹,是则返回true,否则返回false
      * `boolean isFile();    `   判断file对象是否u才能在
      * `boolean isHidden();`     判断指定文件路径是否存在**隐藏文件**创建功能  
      boolean creatNewFile() 创建文件
      boolean mkdir()  创建文件夹
      boolean mkdirs()    创建多级文件夹删除功能
  • boolean delete();  不单单是删除文件夹,这里还可以删除文件
  • 注意: 删除文件之前,首先要确定根文件夹下没有子文件或子文件夹,


如果有子文件,要先删除文件才能删除父类文件夹
  
  public class FileDmeo2 {
      public static void main(String[] args) throws IOException {
          // 创建一个文件
          // File f1 = new File("a");
          // System.out.println(f1.createNewFile());
  ​
  ```
      // 创建一个文件夹
      // File f2 = new File("b");
      // System.out.println(f2.mkdir());
  ​
      // 创建多个文件夹
          //  File f3 = new File("d\\bb\\c");
      // System.out.println(f3.mkdirs());
  ​
      // 删除文件夹
      // System.out.println(f2.delete());
      // 注意 我们在删除多级文件夹时,删除的时他最后一个根目录文件夹,而不是全部的文件夹
          System.out.println(f3.delete());
  ​
      // 删除一个文件,他的根目录下不能有子文件夹和子文件存在
      File f5 = new File("d");
      System.out.println(f5.delete());
      }
  }
判断功能
  • boolean exists();                判断文件是否存在
    boolean isAbsolute();        测试此抽象路径名是否为绝对路径名  boolean isDirectory();        判断是否是文件夹是则返回true,否则返回false boolean isFile();                判断file对象所指向是都是文件夹
  • boolean isHidden();   判断绝对路径中是否有隐藏文件存在


  
  public class FileDemo_03 {
      public static void main(String[] args) throws IOException {
          File f1 = new File("c");
          File f3 = new File("a.txt");
          // 创建里一个文件
          f3.createNewFile();
         
          // boolean exists(); 判断文件或者文件加夹是否存在
          method1(f3);
      
          // 判断这个file对象所指向的是否是文件夹,如果是则返回true,否则返回false
          method2(f1);
      
          // // boolean isFile(); 判断是是否是一个文件,如果是返回true,否则返回false
          method3(f3);
         
          //判断此路径是否是绝对路径,如果是绝对路径则返回true,否则返回false
          method4();
      
          // boolean isHidden(); 判断绝对路径下有没有隐藏文件属性,如果有则返回true,没有则返回false
          method5()
      }
      private static void method5() {
          // boolean isHidden(); 判断绝对路径下有没有隐藏文件属性,如果有则返回true,没有则返回false
          File f = new File("D:\\Dmeo\\123.txt");
          System.out.println("是否有隐藏文件"+f.isHidden());
      }
      
          private static void method4() {
          File f = new File("D:\\Dmeo\\123.txt");
          System.out.println(f.isAbsolute());
      }
      
      private static void method3(File f3) {
          // boolean isFile(); 判断是是否是一个文件,如果是返回true,否则返回false
          System.out.println(f3.isFile());
      }
      
      private static void method2(File f1) {
          // 判断这个file对象所指向的是否是文件夹,如果是则返回true,否则返回false
          System.out.println(f1.isDirectory());
      }
      
      private static void method1(File f3) {
          // boolean exists(); 判断文件或者文件加夹是否存在
          System.out.println(f3.exists());
      }
  }
获取功能
  • File getAbsoluteFile()  以File对象的形式返回当前File对象所指向的绝对路径
  • String getAbsolutePath() 返回File对象所指向的绝对路径
  • String getPatent();   返回一个字符串形式的父路径
  • File getParentFile(); 以File对象的形式返回一个父路径String getName();        返回文件或文件夹的名称 String getPath();        给出的文件是什么路径,输出的就是什么路径
  • long lastModified(); 获取文件最后修改的时间,以毫秒值long返回
  • long length(); 获取这个文件的字节数


修改功能:
  • boolean renameTo(File dest)        将当前file对象所指向得路径修改为指定File所指向的路径         
  • 注意:在同一个文件目录下,不能存在两个同名的文件,即修改成功的前提,在该file对象指定路径下不能存在相同的文件


  
         public class FileDemo_04 {
         public static void main(String[] args) throws IOException {
         // 返回绝对路径的方法
            method();
  ​
         // 返回指定文件的路径
         // String getPatent();
         // File getParentFile();
            method2();
  ​
         // String getName();  //返回文件或文件夹的名称
         // String getPath(); //给出的文件是什么路径,输出的就是什么路径
            method3();
  ​
            method4();
  ​
  ​
         //boolean renameTo(File dest)  修改文件名     
          File f = new File("c.txt");
          File f2 = new File("d.txt");
          if (!f.exists()) {
          f.createNewFile();
         }
          System.out.println(f.renameTo(f2));
         }
  ​
    private static void method4() {
      // long lastModified();
      // long length();
      File f = new File("a.txt");
      long a = f.lastModified();// 返回这个文件的long值
      Date da = new Date(a); // 调用date构造方法,求出这个文件创建的时间
      System.out.println(da.toLocaleString());
  ​
      // long length();  返回这个文件的字节数;斌且只能返回文件的字节数
      long b = f.length();
      System.out.println(b);
    }
  ​
    private static void method3() throws IOException {
      // String getName(); 返回文件名
      // String getPath(); 返回路径
      File f = new File("a.txt");
      //判断这个文件是否存在
      if (!f.exists()) {
          f.createNewFile();
      }
      File f2 = new File("d:\\b\\a.txt");
      File f3 = new File("b");
      // String getName();
      // System.out.println(f.getName()); //可以获取文件和文件夹的名称
      // System.out.println(f2.getName());
      // System.out.println(f3.getName());
  ​
      // String getPath() 你给出什么路径,输出的就是什么路径,绝对路径输出绝对路径,相对路径输出相对路径
      System.out.println(f.getPath());
      System.out.println(f2.getPath());
      System.out.println(f3.getPath());
    }
  ​
    private static void method2() throws IOException {
      File f2 = new File("D:\\Dmeo2");
      // File f = new File("D:\\Demo2\\hello.txt");
      File f3 = new File(f2, "Demo.txt");
      // 先判断是否存在文件夹,如果不存在文件夹,那么我们就需要添加文件夹
      if (!f2.exists()) {
          f2.mkdirs();
      }
      // 创建完对象以后,我们再创建文件
      System.out.println(f3.createNewFile());
      // String getParent()
      System.out.println(f3.getParent()); // 返回指定文件的父路径,以字符串的形式输出
      // File getParentFile()
      System.out.println(f3.getParentFile()); // 以file类对象的形式返回父路径,调用toString方法,输出
    }
  ​
    private static void method() {
      File f = new File("d:\\a\\b.txt");
      File f2 = new File("a.txt");
  ​
      // File getAbsoluteFile() 以file对象的形式返回 当前File的对象所指向的绝对路径
      System.out.println(f2.getAbsoluteFile());
      // String getAbsolutePath()返回的String 返回file对象所指向的绝对路径
      System.out.println(f2.getAbsoluteFile());
    }
    }总结:
IO字节流与IO字符流
​                        InputStreamOutputStream       输入流  和 输出流   字节流
注意:数据传输的最底层是字节,所以普通的字符流能做的事情,我们字节流也能做
​                        FileReaderFileWriter     输入流  和输出流    字符流
字节流和字符流的区别
  • 字节流可以传输图片,视频等
  • 因为任何文件都是用字节来组成的,所以我们可以通过字节流来传输所有的文件,但是我们不可用字符流来传输所有的文件.


字节流复制文本文件
  • FileInputStream类


    • int read(): 读取一个字节, 读完返回-1


      • 注意返回值是int类型, 而不是byte


    • int read(byte[] b): 读取字节到数组中, 返回读取的长度. 读完返回-1
    • close(): 释放资源


  • FileOutputStream类


    • void write(byte b): 写一个字节
    • void write(byte[] b, int offset, int len): 从字节数组的指定索引开始写入指定长度个字节
    • close(): 释放资源



将指定目录(包含内容)复制到另一个目录中: 分析
  • 首先,先要判断是否是文件夹路径
  • 再将文件路径转换成一个File[]数组,存储路径
  • 再判断文件是否是一个文件,如果是一个文件那么就直接复制,如果不是则
  • else { 利用递归思想} 再次循环调用自身的方法,知道把所有的文件全部复制完成


  
  ​
  /*
   * 需求:  将一个文件路径,复制到另一个文件路径中
   *
   * 我们需要源目录   目标目录
   *
   * 分析:
   *      首先我们要获取源目录下所有的子文件和子目录
   *            我们可以把源文件封装成一个File对象
   *           我们可以调用File类ListFiles()方法;
   *           我们可以获取源目录下所有的文件和子目录所对应的File对象.
   *      如果我们获取到的是文件
   *           先在目标目录中创建该文件所对应的目标
   *          进行文件的复制.
   *      如果我们获取到的是子目录
   *          看看子目录下面是否还有其他的文件和更深层次的子目录
   *
   */
  public class IoDemo04 {
      public static void main(String[] args) throws IOException {
          // 源文件
          File src = new File("d:\\myAPI"); // d:myAPI\\Demo.txt
          // 目标文件
          File dest = new File("d:\\Demo"); // d:\\Demo\\myAPI\\Dmeo.txt
          dest.mkdirs();
          method(src, dest);
      }
  ​
      public static void method(File src, File dest) throws IOException {
          // 先判断这两个是否是一个路径,如果这两个是路径,那么执行下面的操作
          if (src.isDirectory() && dest.isDirectory()) {
              File f3 = new File(dest, src.getName());
              f3.mkdirs();
              // 获取路径下的所有子文件和子目录
              File[] files = src.listFiles();
              for (File newSrc : files) {
                  // 判断file对象是否是文件 newSrc: d:myAPI\\Demo.txt
                  if (newSrc.isFile()) {
                      // 如果file对象是文件,那么就进行文件复制
                      // IO流复制
                      BufferedInputStream bis = new BufferedInputStream(new FileInputStream(newSrc.getAbsolutePath()));
                      BufferedOutputStream bos = new BufferedOutputStream(
                              new FileOutputStream(new File(f3, newSrc.getName())));
                      int ar;
                      while ((ar = bis.read()) != -1) {
                          bos.write(ar);
                      }
                      bos.close();
                      bis.close();
                  } else {
                      // 如果不是File对象不是文件,那么就是路径,子目录(递归)
                      method(newSrc, f3);
                  }
  ​
              }
          }
      }
  }


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马