Java常用API(六)——File

版权声明:木心 https://blog.csdn.net/sinat_41642067/article/details/84708509

   java.io.File类,File用于表示文件系统中的一个文件或目录。使用File可以:

1.访问所表示的文件或目录的属性信息(名字,大小等)

2.创建,删除文件或目录

3.访问目录子项

    但是不能访问数据创建File时要指定路径,使其表示该路径下的文件或目录,这里目录通常指相对路径,虽然不能准确描述位置。但是根据运行环境而定,可以实现跨平台"./"指当前目录,在eclipse下运行java程序时当前目录的位置就是所在项目的目录。

public class FileDemo {
	public static void main(String[] args) {
		File file=new File("./demo.txt");
		System.out.println(file.getName());
		System.out.println(file.length());
		/**可读*/
		System.out.println(file.canRead());
		/**可写*/
		System.out.println(file.canWrite());
		/**是否隐藏*/
		System.out.println(file.isHidden());
	}
}

     使用File创建一个新文件:

public class CreateNewFileDemo {
	public static void main(String[] args) throws IOException {
		/**
		 * 在当前目录下新建一个文件test.txt
		 */
		File file=new File("./test.txt");//抽象路径
		//判断file文件表示的文件或目录是否真实存在
		if (!file.exists()) {
			//将file表示的文件创建出来
			file.createNewFile();//抛出异常
			System.out.println("successfully created");
		}else {
			System.out.println("already exist");
		}
	}
}

    删除一个文件:

public class DeleteFileDemo {

	public static void main(String[] args) {
		/**
		 * 删除当前目录下的test.txt
		 * ./是默认的
		 */
		File file=new File("test.txt");
		file.delete();
		if (!file.exists()) {
			System.out.println("successfully deleted");
		}
	}
}

    创建一个目录:

public class MkDirDemo {
	public static void main(String[] args) {
		/**
		 * 在当前目录下新建一个目录:demo
		 */
		File dir=new File("demo");
		if (!dir.exists()) {
			dir.mkdir();
			System.out.println("已创建");
		}else {
			System.out.println("已存在");
		}
	}
}

     创建一个多级目录:

public class MkDirsDemo {
	public static void main(String[] args) {
		/**
		 * 在当前目录下新建./a/b/c/d/e/f
		 */
		File dir=new File("a/b/c/d/e/f");
		if (!dir.exists()) {
			/**
			 * mkdirs将所有不存在的父目录一同创建出来
			 */
			dir.mkdirs();
			System.out.println("已创建");
		}else {
			System.out.println("已存在");
		}
	}
}

    删除目录:

public class DeleteDirDemo {
	public static void main(String[] args) {
		File dir=new File("demo");
		if (dir.exists()) {
			//删目录的前提是必须是一个空目录
			dir.delete();
			System.out.println("已删除");
		}else {
			System.out.println("没有该目录");
		}
	}
}

    获取一个目录的所有子项。

public class ListFilesDemo {
	public static void main(String[] args) {
		/**
		 * 获取当前目录的所有子项
		 */
		File dir=new File(".");
		/**
		 * boolean isDirectory()
		 * 判断file表示的是一个目录
		 * boolean isFile()
		 * 判断是否是一个文件
		 */
		if (dir.isDirectory()) {
			File[]files=dir.listFiles();
			System.out.println(files.length);
			for (int i = 0; i < files.length; i++) {
				System.out.println(files[i].getName());
			}
		}
	}
}

    完成方法,删除指定的File表示的文件或目录。

public class Test {
	public static void main(String[] args) {
		File dir=new File("a");
		delete(dir);
	}
	public static void delete(File file) {
		/** 首先判断file是否是一个目录,要是目录则需要先将该目录的子项全部删除后才可以删除
目录,若是文件则可以直接删除*/
		if (file.isDirectory()) {
			File[]files1=file.listFiles();
			for (int i = 0; i < files1.length; i++) {
/**递归调用*/
				delete(files1[i]);
			}
			file.delete();
		}	  
	}
}

    listFiles有一个重载方法,允许我们传入一个参数,该参数为一个文件过滤器,那么该方法会将目录中满足过滤器要求的子项返回。

public class ListFilesDemo2 {
	public static void main(String[] args) {
		File dir=new File(".");
		/**
		 * 获取当前目录中名字以"."开头的子项
		 */
		//lamda表达式
		File[]dirs=dir.listFiles(new FileFilter() {	
			public boolean accept(File pathname) {
				String name=pathname.getName();
				return name.startsWith(".");
			}
		});
		/**
		 * 该listFiles方法会将目录中的每个子项都通过
		 * 调用给定的过滤器的accept方法进行判断,将返
		 * 回true的子项保留并以数组形式返回
		 */
		System.out.println(dirs.length);
	}
}

 

猜你喜欢

转载自blog.csdn.net/sinat_41642067/article/details/84708509