黑马程序员技术交流社区

标题: 【石家庄校区】Java-File类和字节字符流学习笔记 [打印本页]

作者: g207776411    时间: 2018-4-23 15:13
标题: 【石家庄校区】Java-File类和字节字符流学习笔记
本帖最后由 小石姐姐 于 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的常见功能
创建文件
注意:传入一个多级路径时,路径的最后所指向的文件就是你要操作的文件
获取功能
修改功能
判断功能
  
      * `boolean isDirectory();`  判断file对象是否是文件夹,是则返回true,否则返回false
      * `boolean isFile();    `   判断file对象是否u才能在
      * `boolean isHidden();`     判断指定文件路径是否存在**隐藏文件**创建功能  
      boolean creatNewFile() 创建文件
      boolean mkdir()  创建文件夹
      boolean mkdirs()    创建多级文件夹删除功能
如果有子文件,要先删除文件才能删除父类文件夹
  
  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());
      }
  }
判断功能
  
  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());
      }
  }
获取功能
修改功能:
  
         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     输入流  和输出流    字符流
字节流和字符流的区别字节流复制文本文件
将指定目录(包含内容)复制到另一个目录中: 分析
  
  ​
  /*
   * 需求:  将一个文件路径,复制到另一个文件路径中
   *
   * 我们需要源目录   目标目录
   *
   * 分析:
   *      首先我们要获取源目录下所有的子文件和子目录
   *            我们可以把源文件封装成一个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);
                  }
  ​
              }
          }
      }
  }







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2