IO流从入门到精通(一)

目录

File类的使用 

1.关于文件路径的表示

2.File的构造器

3.绝对路径与相对路径

4.File类的创建和删除

5.File类的判断功能

6.File类的获取和修改名字功能

7.其它获取功能

8.案例:输出指定目录下所有的java文件名(包含子目录)

9.案例:删除指定的目录(包含子目录)


File类的使用 

1.关于文件路径的表示

		String path;
		System.out.println(File.separatorChar);		
		//路径的表示方法:
		//1、/
		path = "D:/java300/IO_study01/IO.png";
		System.out.println(path);
		//2、常量拼接
		path ="D:"+File.separator+"java300"+File.separator+"IO_study01"+File.separator+"IO.png";
		System.out.println(path);
		//前两种方法可以在Linux和Windows系统都有效
		//3、使用转义字符,适用windows
		path = "D:\\a\\b.txt";
		System.out.println(path);

运行结果:

2.File的构造器

  • File(String pathname) :将一个字符串路径封装成File对象
  • File(String parent,String child):传入一个父级路径和子级路径
  • File(File parent,String child):传入一个File类型的父级路径和子级路径
		//1、构建File对象
		File src = new File(path);
		
		//2、构建File对象
		src = new File("D:/java300/IO_study01","IO.png");
		src = new File("D:/java300/","IO_study01/IO.png");
		
		//3、构建File对象
		src = new File(new File("D:/java300/IO_study01"),"IO.png");

3.绝对路径与相对路径

	/**
	 * 构建File对象
	 * 相对路径与绝对路径
	 * 1)、存在盘符: 绝对路径
	 * 2)、不存在盘符:相对路径  ,当前目录 user.dir
	 * @param args
	 */
	public static void main(String[] args) {
		String path ="D:/java300/IO_study01/IO.png";
		
		//绝对路径
		File src = new File(path);
		System.out.println(src.getAbsolutePath());
		
		//相对路径,其中 user.dir 代表当前工程
		System.out.println(System.getProperty("user.dir"));
		src = new File("IO.png");
		System.out.println(src.getAbsolutePath());
		
		
		//构建一个不存在的文件
		src = new File("aaa/IO2.png");
		System.out.println(src.getAbsolutePath());
	}

运行结果 

4.File类的创建和删除

  • boolean createNewFile():指定路径不存在该文件时时创建文件,返回true,否则返回false
  • boolean mkdir():当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false 
  • boolean mkdirs():当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
  • boolean delete():删除文件或者删除单级文件夹
/*
 * 	创建功能
 * 		boolean createNewFile()  
 * 		boolean mkdir()  
 * 		boolean mkdirs()  
 * 	删除功能
 * 		boolean delete() 
 * 
 *  绝对路径:固定不可改变的路径,以盘符开头
 *  相对路径:相对某个参照物,不能以盘符开头
 *  		在eclipse中相对路径相对应当前项目的根目录
 *  
 *  
 *  注意:删除一个文件夹,这个文件夹下面不能有其他的文件和文件夹
 */
		 //boolean createNewFile() : 当指定文件不存在时创建文件并返回true,否则返回false
		  File f1 = new File("d:/a/b.txt");//绝对路径
		  System.out.println(f1.createNewFile());
		  /*
		   * 运行结果:
		   * 		若d盘下不存在目录a则抛异常"系统找不到指定的路径";
		   * 		若d盘下存在a目录且a目录下没有b.txt则在a目录下创建b.txt并返回true否则返回false
		   */
		  File f2 = new File("a.txt");//相对路径
		  System.out.println(f2.createNewFile());
		  /*
		   * 运行结果:
		   * 		若当前项目跟目录下不存在a.txt则创建a.txt并返回true否则返回false;
		   */

		//boolean mkdir()   : 当指定文件夹不存在时创建文件夹并返回true,否则返回false
		File f3 = new File("b");
		System.out.println(f3.mkdir());

		//boolean mkdirs() : 创建指定文件夹,当文件夹所在的目录不存在,则顺道一块创建了,若目标已存在返回false
		File f4 = new File("c\\d\\e");
		System.out.println(f4.mkdir());//改行返回false,因为该方法无法创建多级目录
		System.out.println(f4.mkdirs());	

		File f5 = new File("c.txt");
		System.out.println(f5.mkdir());//创建了名为c.txt的文件夹

		//boolean delete() :当指定的文件或文件夹存在时删除文件或者文件夹 并返回true,否则返回false
		//如果要删除的目录下有文件或文件夹则必须先删除子目录或子文件,否则删除失败
		File f6 = new File("c");
		System.out.println(f6.delete());


5.File类的判断功能

  • boolean exists():判断指定路径的文件或文件夹是否存在
  • boolean isAbsolute():判断当前路路径是否是绝对路径
  • boolean isDirectory():判断当前的目录是否存在
  • boolean isFile():判断当前路径是否是一个文件
  • boolean isHidden():判断当前路径是否是隐藏文件
/*
 *	判断功能
 * 		boolean exists()  
 * 		boolean isAbsolute()  
 * 		boolean isDirectory() 
 		boolean isFile()  
 		boolean isHidden() 
 */

private static void method() {
		File f = new File("a.txt");
		f.createNewFile();
		
		//boolean exists() : 判断文件或者文件夹是否存在,如果存在则返回true,否则返回false
		System.out.println(f.exists());
	}
private static void method2() {
		File f = new File("a.txt");
		File f2 = new File("d:\\a\b.txt");
		
		//boolean isAbsolute() :判断File对象指向的路径是否是绝对路径,如果是绝对路径则返回true,否则返回false
		System.out.println(f2.isAbsolute());
	}
private static void method3() {
		File f = new File("a.txt");
		File f2 = new File("b");
		//boolean isDirectory() :判断File对象指向的路径是否是文件夹,如果是则返回true,否则返回false
		//boolean isFile()  : 判断File对象指向的路径是否是文件,如果是则返回true,否则返回false
		
		System.out.println(f.isDirectory());
		System.out.println(f2.isDirectory());
		
		System.out.println(f.isFile());
		System.out.println(f2.isFile());
	}
private static void method4() {
		File f = new File("d:\\a\\b.txt");
		//boolean isHidden() :判断File对象指向的路径是否有隐藏属性,如果隐藏了则返回true,否则返回false
		
		System.out.println(f.isHidden());
	}

6.File类的获取和修改名字功能

  •   File getAbsoluteFile():获取文件的绝对路径,返回File对象
  •   String getAbsolutePath():获取文件的绝对路径,返回路径的字符串
  •   String getParent():获取当前路径的父级路径,以字符串形式返回该父级路径
  •   File getParentFile():获取当前路径的父级路径,以字File对象形式返回该父级路径
  •   String getName():获取文件或文件夹的名称
  •   String getPath():获取File对象中封装的路径
  •   long lastModified():以毫秒值返回最后修改时间
  •   long length():返回文件的字节数
  •   boolean renameTo(File dest): 将当前File对象所指向的路径 修改为 指定File所指向的路径
/*
 *	获取功能
 		File getAbsoluteFile()  
 * 		String getAbsolutePath() 
 * 		String getParent()  
 * 		File getParentFile() 
 * 		String getName() 
 * 		String getPath()  
  		long lastModified() 
  		long length() 
  	修改功能:
 		boolean renameTo(File dest)
 */
	private static void method1() {
		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() : 返回File对象所指向的绝对路径
		System.out.println(f2.getAbsolutePath());
	}
	private static void method2() throws IOException {
		File f = new File("a.txt");
		
		File f2 = new File("b","c.txt");
		System.out.println(f2.createNewFile());
		
		File parent = new File("b");
		File f3 = new File(parent,"c.txt");
		if(!parent.exists()) {
			parent.mkdirs();
		}
		System.out.println(f3.createNewFile());
		
		//String getParent() 
		System.out.println(f3.getParent());
		//File getParentFile() 
		System.out.println(f3.getParentFile());
	}
	private static void method3() {
		File f = new File("a.txt");
		File f2 = new File("d:\\a\\b.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() : 返回创建File对象时给的路径
		System.out.println(f.getPath());
		System.out.println(f2.getPath());
		System.out.println(f3.getPath());
		
		//long lastModified() : 以毫秒值的形式返回最后修改时间
		System.out.println(f.lastModified());
		//2514023311294
		Date d = new Date(2514023311294L);
		System.out.println(d.toLocaleString());
		
		//long length() : 返回文件的字节数
		System.out.println(f.length());
		System.out.println(f3.length());
	}
	private static void method4() {
		File f = new File("d.txt");
		File f2 = new File("e.txt");
		
		//boolean renameTo(File dest) : 将当前File对象所指向的路径 修改为 指定File所指向的路径
		//可以进行移动文件或重命名文件
		//注意:目标文件路径不能存在,如果存在则修改失败
		System.out.println(f.renameTo(f2));
	}

7.其它获取功能

  • String[] list():以字符串数组的形式返回当前路径下所有的文件和文件夹的名称
  • File[] listFiles():以File对象的形式返回当前路径下所有的文件和文件夹的名称
  • static File[] listRoots():获取计算机中所有的盘符
	private static void method() {
		File f = new File("b");
		
		//String[] list() : 返回当前路径下所有的文件和文件夹名称
		//注意:只有指向文件夹的File对象才可以调用该方法
		String[] files = f.list();
		for (int i = 0; i < files.length; i++) {
			System.out.println(files[i]);
		}
	}

	private static void method2() {
		File f = new File("b");
		//File[] listFiles()
		File[] files = f3.listFiles();
		for (File file : files) {
			System.out.println(file.getName());
		}
	}

	public static void method3() {		
		//static File[] listRoots() :  返回的是所有盘符
		File[] files = File.listRoots();
		for (File file : files) {
			System.out.println(file);
		}
		
	}

8.案例:输出指定目录下所有的java文件名(包含子目录)

/*
 * 需求:输出指定目录下所有的java文件名(包含子目录)
 */

public class RecurrenceTest {
	public static void main(String[] args) {
		File f = new File("src");
		//File f = new File("src\\com\\itheima_01\\RecurrenceDemo.java");
		method(f);
	}
	
	public static void method(File file) {
		if(file.isDirectory()) {
			File[] files = file.listFiles();
			for (File f : files) {
				//判断是否是文件对象
				if(f.isFile()) {
					if(f.getName().endsWith(".java")) {
						System.out.println(f.getName());
					}
				}
				else if(f.isDirectory()){
					//是一个目录对象
					method(f);
				}
			}
		}
	}
	
	
	//输出指定目录下的所有java文件名(不包含子目录)
	public static void method2(File file) {
		if(file.isDirectory()) {
			File[] files = file.listFiles();
			for (File f : files) {
				//判断是否是文件对象
				if(f.isFile()) {
					if(f.getName().endsWith(".java")) {
						System.out.println(f.getName());
					}
				}
			}
		}
	}
	
}

9.案例:删除指定的目录(包含子目录)

/*
 * 需求:删除指定的目录(包含子目录)
 * 
 * 注意:如果要删除一个目录,则需要先删除这个目录下的所有子文件和子目录
 * 
 */
public class RecurrenceTest2 {
	public static void main(String[] args) {
		File f = new File("d:\\a");
		method(f);
	}
	
	//删除指定目录下所有文件和目录
	public static void method(File file) {
		if(file.isDirectory()) {
			//干掉自己所有的子文件和子目录
			//获取所有的子文件和子目录
			File[] files = file.listFiles();
			for (File f : files) {
				if(f.isFile()) {
					//直接干掉他
					System.out.println(f.getName());
					f.delete();
				}
				else if(f.isDirectory()) {
					//继续查看是否还有文件和子目录
					method(f);
				}
			}
			
			//干掉自己
			System.out.println(file.getName());
			file.delete();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_30162219/article/details/73123441