Java基础-知识点总结-Java IO(六)-File

 

Java IO(六)-File

【File类概述】

 

      public classFileextends Object implementsSerializable,Comparable<File>

 

             文件和目录路径名的抽象表示形式。用来将文件或文件夹封装成对象,方便于对文

 

             件或文件夹的属性进行操作。

 

【File类中的常用字段和方法】

 

  1. 构造方法:

    1. publicFile(File parent, String child):根据 parent抽象路径名和 child路径名字符串创建一个新 File实例。

      如:File f3 = new File("e:\\test\\day20");

             File f4 = new File(f3,"c.txt");

    2. publicFile(String pathname):通过将给定路径名字符串转换为抽象路径名来创建一个新File实例。

      如:File f1 = new File("a.txt");

    3. publicFile(String parent,String child):根据 parent路径名字符串和 child路径名字符串创建一个新 File实例。

      如:File f2 = new File("e:\\test\\day20","b.txt");

  2. 静态字段

    public static final String separator

    与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。

    用法:File f2 = newFile("e:"+File.separator+"test"+File.separator+"day20");

  3. 创建:

    1. public boolean createNewFile()throws IOException:当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。若已有同名文件存在则创建失败,返回false

      如:File f = new File("e:\\test\\day20","file.txt");

             sop("是否创建成功:"+f.createNewFile());//第一次运行为true

    2. public static File createTempFile(String prefix,Stringsuffix)throws IOException:在默认临时文件目录中创建一个空;临时文件,使用给定前缀和后缀生成其名称。调用此方法等同于调用createTempFile(prefix, suffix, null)。prefix - 用于生成文件名的前缀字符串;必须至少是三字符长;suffix -用于生成文件名的后缀字符串;可以为 null,在这种情况下,将使用后缀 ".tmp"

    3. public static File createTempFile(String prefix,Stringsuffix,File directory)throws IOException:在指定目录中创建一个新的空临时文件,使用给定的前缀和后缀字符串生成其名称。directory -将创建的文件所在的目录;如果使用默认临时文件目录,则该参数为null

    4. public boolean mkdir():创建此抽象路径名指定的目录。该方法只能创建一级目录

      如:File f3 = new File("e:\\test\\day20\\abc");

             sop(f.mkdir());//false

    5. public boolean mkdirs():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。注意,此操作失败时也可能已经成功地创建了一部分必需的父目录。

      如:File f3 = new File("e:\\test\\day20\\abc");

             sop(f.mkdirs());//true

  4. 删除:

    1. public boolean delete():删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。如果指定文件或目录不存在,则删除失败,返回false

      如:sop("是否删除成功:"+f.delete());//结果为true

    2. public void deleteOnExit():在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。

  5. 判断:

    1. public boolean exists():测试此抽象路径名表示的文件或目录是否存在。

    2. public boolean canExecute():测试应用程序是否可以执行此抽象路径名表示的文件。

    3. public boolean isFile():测试此抽象路径名表示的文件是否是一个标准文件。使用该方法之前必须要先判断该文件对象封装的内容是否存在。

    4. public boolean isDirectory():测试此抽象路径名表示的文件是否是一个目录。使用该方法之前必须要先判断该文件对象封装的内容是否存在。

    5. public boolean isHidden():测试此抽象路径名指定的文件是否是一个隐藏文件。隐藏的具体定义与系统有关。在UNIX系统上,如果文件名以句点字符('.')开头,则认为该文件被隐藏。在Microsoft Windows系统上,如果在文件系统中文件被标记为隐藏,则认为该文件被隐藏。

    6. public boolean isAbsolute():测试此抽象路径名是否为绝对路径名。绝对路径名的定义与系统有关。在UNIX系统上,如果路径名的前缀是"/",那么该路径名是绝对路径名。在 Microsoft Windows系统上,如果路径名的前缀是后跟"\\"的盘符,或者是"\\\\",那么该路径名是绝对路径名。该方法不用判断该File对象封装的内容是否存在

  6. 获取:(以下方法都不用考虑文件对象封装的内容是否存在)

    1. public StringgetName():返回由此抽象路径名表示的文件或目录的名称。该名称是路径名名称序列中的最后一个名称。如果路径名名称序列为空,则返回空字符串。

    2. public StringgetParent():返回此抽象路径名父目录的路径(即路径名名称序列中的最后一个名称之前的路径)名字符串;如果此路径名没有指定父目录,则返回null。

    3. public StringgetPath():将此抽象路径名转换为一个路径名字符串。

    4. public StringgetAbsolutePath():返回此抽象路径名的绝对路径名字符串。

    5. public long lastModified():返回此抽象路径名表示的文件最后一次被修改的时间。

    6. public long length():返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。

  7. 文件列表:

    1. public static File[] listRoots():列出可用的文件系统根

    2. public String[]list():返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。若此抽象路径名不存在或是存在的文件,则返回null,若此抽象路径名表示的目录内存在,但是空目录,则什么也不返回

    3. public File[]listFiles():该方法与list方法类似,只是返回值类型不同。

    4. public String[]list(FilenameFilter filter):返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。除了返回数组中的字符串必须满足过滤器外,此方法的行为与list()方法相同。如果给定filter为null,则接受所有名称。

      public interfaceFilenameFilter

      实现此接口的类实例可用于过滤器文件名。

      - boolean accept(Filedir,String name):

             测试指定文件是否应该包含在某一文件列表中。dir -被找到的

             文件所在的目录。name -文件的名称。

                           例:

 

 

		File f = new File("E:\\test\\day19");
		String[] names = f.list(new FilenameFilter()// 使用匿名类创建一个过滤器
				{
					public boolean accept(File dir, String name) {
						// 查看list()源码可知,dir为f,name为f中文件或文件夹的名称
						// 所以在该方法中只定义判断条件就可以了
						System.out.println("dir:" + dir + "\tname:" + name);
						return name.endsWith(".mp3");
					}
				});
		for (String name : names)
			System.out.println(name);
		System.out.println("len:" + names.length);

 

 

 

    1. public File[]listFiles(FilenameFilter filter):该方法与list(FilenameFilter filter)方法类似,只是返回值类型不同

      【列出目录下所有内容】

                   由于目录中有可能还有子目录,获取子目录中的内容则需要执行同样的方法获取。

                    也就是方法自身调用自身。这种方法自身调用自身的表现形式叫做递归算法。

                    使用递归算法时应注意:

 

  1. 要限定条件,防止程序无法结束。

  2. 要注意递归的次数,避免内存溢出。

    例:

 

	public static void main(String[] args) {
		File f = new File("E:\\test");
		getFiles(f, 0);
	}

	// 定义方法,为获得到的列表内容添加层次符号
	public static String getLevel(int level) {
		// 根目录符号:|--
		StringBuilder sb = new StringBuilder("|--");
		for (int i = 0; i < level; i++)
			sb.insert(0, "   ");// 每增加一层,在前面添加三个空格
		return sb.toString();
	}

	public static void getFiles(File file, int level) {
		// 打印当前目录
		System.out.println(getLevel(level) + file.getName());
		level++;// 层次自增
		File[] files = file.listFiles();
		for (int i = 0; i < files.length; i++) {
			if (files[i].isDirectory())
				getFiles(files[i], level);// 若是目录,则递归
			else
				// 否则,打印文件
				System.out.println(getLevel(level) + files[i].getName());
		}
	}

 

 

 

【删除带内容的目录】

 

      File类中的delete()方法在删除目录时,必须要保证该目录为空并且是非隐藏的,

 

      所以若要删除该目录,则首先要删除目录中的文件和子目录,而删除子目录也要考

 

      虑是否为空,所以可以用递归算法进行删除

 

	public static void removeDir(File dir) {
		if (dir.exists()) {
			File[] files = dir.listFiles();
			for (int x = 0; x < files.length; x++) {
				if (!files[x].isHidden() && files[x].isDirectory())
					removeDir(files[x]);
				else
					System.out.println(files[x] + "--file delete:"
							+ files[x].delete());
			}
			System.out.println(dir + "--dir delete:" + dir.delete());
		} else
			System.out.println("This dir is not exist!");
	}

 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值