黑马程序员_File

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

File:因为在IO流操作中,我们最常用的数据是文件,所以为了方便的对文件进行描述,
java 就提供了一个类File供我们使用。

File构造方法:
  File(String pathname):根据给定的路径创建一个File对象
  File(String parent, String child):根据父目录和子路径
  创建一个File对象
   File(File parent, String child):根据父目录File对象和子
  路径创建一个File对象
public class FileDemo {
 public static void main(String[] args) {
File file = new File("d:\\demo\\于龙超.jpg");   //这是File构造方法之一
File file2 = new File("d:\\demo", "于龙超.jpg");//这是File构造方法之一
File file3 = new File("d:\\demo");
File file4 = new File(file3, "于龙超.jpg");    //这是File构造方法之一
}
}

File可以常见文件夹,也可以创建文件!
如果是创建文件,方法就是:
public boolean createNewFile() throws IOException
这个地方有一个抛出异常。
如果是常见文件夹,方法就是:
public boolean mkdir():单级文件夹的创建
public boolean mkdirs():多级文件夹的创建,能够自动的帮你创建不存在的父文件夹。
第二种方法就是用来建立一个文件夹以后然后在这个文件夹后在建立一个空的文件夹。

注意的是:如果是想建立一个多级文件夹可以,但是如果想要建立一个文件夹然后在这个文件夹后面
再建立一个文件的话,那只能是先建立一个文件夹后然后再建立一个文件才可以。

删除文件的方法。
public boolean delete()
这个地方提到的有两点:
A:一个文件夹如果有内容(文件或者文件夹),该文件夹都不能直接被删除。
B:Java程序的删除不走回收站。

重名的功能:
public boolean renameTo(File dest):把指定的File对象的名称修改为给定的dest。
  如果要将一个目录下的文件改名字,必须要在同一个目录下创建一个新的文件名字
   然后将后者作为参数传递到上面这个方法中。
 这个从新命名的方法分为两种方法:
 * 第一:如果是同一个路径下,就是在必须在同一路径下创建一个文件,然后后者作为参数传递到命名方法中。
 * 第二:如果是不同路径下,   就相当于把这个文件先    剪切 --改名字--然后再移动。
 * 另外,这两种方法都是有两个路径,每次都是前者调用方法。
 *   
 *   

在这个地方值得提到的是:
如果是在同一个路径下,运用这个重命名的方法,那就是可以通过重名的方法。
方式如果不是在同一路径下的话,只能是先是剪切然后重命名,再然后就是移动。

 判断功能:
 * public boolean exists():判断该File对象代表的内容是否存在
 * public boolean isDirectory():判断该File对象代表的是否是文件夹
 * public boolean isFile():判断该File对象代表的是否是文件
 * public boolean canRead():判断该File对象代表的内容是否可读
 * public boolean canWrite():判断该File对象代表的内容是否可写
 * public boolean isHidden():判断该File对象代表的内容是否隐藏
 *
 * 这个地方提到了如何对项目中的文件进行隐藏?
 * 首先找到了整个项目的根目录,然后找到这个文件所在的文件夹下,然后  右击--属性--选择隐藏或者只读
 * 如何对隐藏的文件显示:
 * 同样找到整个项目的根目录,然后找到这个文件所在的文件夹下,然后 
 * 找到工具(T)--文件夹选项(O)--查看--高级选项--显示隐藏的文件夹、文件和驱动器。
 * 然后对后面的进行的方法进行练习。
 *
 *
 * 如果说一个文件配设置为只读了,那就是说这个文件不能再写入东西了,这个时候
 * 如果还是打开,然后继续往里面写东西的话,然后保存,系统会提醒你这个文件设置为只读了
 * 如果这个时候还是要进行保存,那这个时候系统会从新生成一个文件,这个文件需要你从新明名
 * 这个从新明名的文件就是用户刚刚改写的东西。
 */

判断方法举例:
public class FileDemo {
 public static void main(String[] args) {
  // 创建文件对象
  File file = new File("eee\\a.txt");

  // 判断
  System.out.println("exists:" + file.exists());// true
  System.out.println("isDirectory:" + file.isDirectory());// false
  System.out.println("isFile:" + file.isFile());// true
  System.out.println("canRead:" + file.canRead());// true
  System.out.println("canWrite:" + file.canWrite());// true
  System.out.println("isHidden:" + file.isHidden());// false
  
 }
}
* 基本获取功能:
 * public String getAbsolutePath():获取该File对象的绝对路径
 * public String getPath():获取该File对象的相对路径
 * public String getName():获取该File对象的文件名称
 * public long length():获取该File对象的长度。文件的大小,以字节为单位
 * public long lastModified():返回最后一次修改时间的毫秒值 
 *
 *所谓绝对路径就是指以     盘符开始的路径就是绝对路径。
 *关于文件的大小有提到的用处是,比如在论坛,在做视频网站的地方,得到文件的大小就可以知道,
 *然后网站决定是否给予,上传的。
 *
 *一个英文字符是两个字节!
 */

public class FileDemo {
 public static void main(String[] args) {
  // 创建文件对象
  File file = new File("eee\\a.txt");

  // public String getAbsolutePath():获取该File对象的绝对路径
  System.out.println(file.getAbsolutePath());
  System.out.println(file.getPath());
  System.out.println(file.getName());
  System.out.println(file.length());
  System.out.println(file.lastModified());

  // long time = 1405149877901L;
  // 1405150597224

  Date d = new Date(1405150597224L);
  System.out.println(d);
 }
}


两个重点的获取功能:
public String[] list():返回指定目录下的所有文件或者文件夹的名称数组。
public File[] listFiles():返回指定目录下的所有文件或者文件夹的File数组。
public class FileDemo {
 public static void main(String[] args) {
  // 封装一个目录
  File file = new File("d:\\");

  // public String[] list():返回指定目录下的所有文件或者文件夹的名称数组。
  
  System.out.println(file.list());//如果此时用这种方法输出这个数组,程序台会输出这个值
//       [Ljava.lang.String;@18b3364
//  因此不能用这种方法遍历。

  
  

  String[] strArray = file.list();
  for (String str : strArray) {
   System.out.println(str);
  }
  System.out.println("----------");

  // 需求:我要获取d判断目录下所有文件的名称
  // public File[] listFiles():返回指定目录下的所有文件或者文件夹的File数组。
  File[] fileArray = file.listFiles();
  for (File f : fileArray) {
   // 只获取文件的名称
   if (f.isFile()) {
    System.out.println(f.getName());
   }

   // 获取所有文件或者文件夹的名称
   // System.out.println(f.getName());
  }
 }
}


输出以“.Java”结尾的文件有两种方法:下面这种方法就是很重要的方法。
同时在这个地方介绍了两种方法:

public String[] list(FilenameFilter filter)
FilenameFilter:实现此接口的类实例可用于过滤器文件名。
这是一个接口。
public class FileDemo {
 public static void main(String[] args) {
  // 封装目录。
  File file = new File("d:\\test");

  String[] strArray = file.list(new FilenameFilter() {
//   上面这行讲课的时候看了一下list的源码!!!
   @Override
   public boolean accept(File dir, String name) {
    // System.out.println(dir + "---" + name);
//    这个时候dir代表的是目录,name代表的是文件的名称;这两个合起来就是:
//    这两者合起来就是一个全路径。可以将这个全路径当做File后面的参数。
//    这个全路径:比如:d:\1------EditPlus.lnk
//    类似于:“d:\\1”,“EditPlus.lnk”
    // File file = new File(dir, name);
    // boolean flag = file.isFile();
    // boolean flag2 = name.endsWith(".java");
    // return flag && flag2;
//     这句话的意思是如果你满足这个方法,也就说你是true 了
//    那么就可以添加到这个数组里面。

    return new File(dir, name).isFile() && name.endsWith(".java");
   }
  });

  for (String str : strArray) {
   System.out.println(str);
  }
 }
}
package cn.itcast.test;

import java.io.File;


/*
 * 需求:请把d盘目下test目录中的.java结尾的文件名称输出。
 *
 * 思路:
 *   A:先获取所有文件对象,然后判断,最后输出。
 *   (笔记如下文)
 *   B:先判断,然后满足条件的,在放到数组中,最后输出。
 *      (笔记存放在day20--day20_File--cn.itcast_08--FileDemo.java)
 *
 *
 * 分析:
 *   A:封装目录。
 *   B:获取改目录下所有文件或者文件夹的File数组。
 *   C:遍历该数组,获取得到每一个File对象。
 *   D:判断是否是文件:
 *    是:
 *     继续判断是否是以java结尾
 *      是:输出文件名称。
 *      否:不搭理它。
 *    否:不搭理它。
 */

public class FileTest {
 public static void main(String[] args) {
  // 封装目录。
  File file = new File("d:\\1");

  // 获取改目录下所有文件或者文件夹的File数组。
  File[] fileArray = file.listFiles();

  // 遍历该数组,获取得到每一个File对象。
  for (File f : fileArray) {
   // 判断是否是文件
   if (f.isFile()) {
    // 继续判断是否是以java结尾
    if (f.getName().endsWith(".java")) {
     System.out.println(f.getName());
    }
   }
  }
 }
}





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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值