IO流file部分

IO流概念:IO流其实就是java程序与计算机上(或者网络上的文件),进行交互的抽象过程。

1、file文件

  • IO流通过java程序操作计算机上的文件或者文件夹;Windows操作系统使用dos命令来操作计算机上的文件。

1、1File

java用来表示文件的类,该类用来表示文件的路径。
在这里插入图片描述

  • 相对路径和绝对路径的区别:
    相对路径:要有参考目标,以参考目标为例相对于目标的位置
    绝对路径:能够直接准确定位到的位置,就是哪个盘符下
  • 在java程序中,如果要将文件放到程序中的时候,应该将他放到项目的根目录或者根目录的子目录下(不可以放到src下,src是资源文件夹);
  • URL / URI:统一资源定位符
    URI:只能进行位置的确定,只能得到位置是什么
    URL:可以获取文件位置,可以使用IO流进行网络资源的获取
    代码演示如下:
@Test
	void  file03(){
		//URI只能定位资源,统一资源标识符
		try {
			URI  uri = new URI("MapDemo.java");
			//返回此 URI 的已解码的路径组成部分。
			System.out.println(uri.getPath());//MapDemo.java
		} catch (URISyntaxException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	
	
	@Test
	void  file04(){
		//使用URL获取资源并下载资源,统一资源定位符
        try {
			URL  url = new URL("http://www.slxy.cn/__local/E/C4/F7/8B0A27C3DA0C354BC0FE9451066_3BEE9DFB_1ABCE.jpg");
			//返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。
			URLConnection openConnection = url.openConnection();
			InputStream inputStream = openConnection.getInputStream();
			FileOutputStream   out = new FileOutputStream(new File("slxy.jpg"));
			byte [] bytes = new byte[1024*1000];
			inputStream.read(bytes);
			out.write(bytes);
			out.close();
			inputStream.close();
			System.out.println("文件下载完成");
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

1、2对文件的操作(文件和文件夹)

1、2、1构造方法

在这里插入图片描述

//使用构造方法实例化
	@Test
	void  file02() {
		/*
		 * 通过两个参数的构造方法进行实例化file的时候,
		 * 自动进行拼接并且自动加上"/",
		 * 如果自己写了就不加
		 */
		//F:\newJ2021\IO文件操作\MapDemo.java
		File  parent = new File("f:/newJ2021");
		/*
		 * 构造方法一
		 * File(File parent, String child)
		 * 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
		 */
		File  file = new File(parent,"\\IO文件操作\\MapDemo.java");
		
		//获取绝对路径
		System.out.println(file.getAbsolutePath());//f:\newJ2021\IO文件操作\MapDemo.java
		
		
		/*
		 * 构造方法二
		 * File(String parent, String child) 
		 * 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
		 */
		File  file01 = new File("f:/newJ2021","\\IO文件操作\\MapDemo.java");
		System.out.println(file01.getAbsolutePath());//f:\newJ2021\IO文件操作\MapDemo.java
	}
	

1、2、2方法

测试操作

  • isAbsolute( );
    在这里插入图片描述
  • isDirectory( );
    在这里插入图片描述
  • isFile( );
    在这里插入图片描述
  • isHidden( );
    在这里插入图片描述
File file = new File("F:\\newJ2021\\StudentSystemOOP\\src\\com\\xingyun\\bean\\Admin.java");
		// 判断路径是绝对路径吗
		System.out.println("是否是绝对路径" + file.isAbsolute());//是否是绝对路径true
		// 判断他是否是一个目录
		System.out.println("是目录吗" + file.isDirectory());//是目录吗false
		// 判断他是否是一个文件
		System.out.println("是文件吗" + file.isFile());//是文件吗true
		// 判断他是否是一个隐藏文件
		System.out.println("是隐藏文件吗" + file.isHidden());//是隐藏文件吗false
		// 判断他是否存在
		System.out.println("是否存在" + file.exists());//是否存在true
		//查看文件的长度
		System.out.println("长度是"+file.length());//长度是689

删除操作

  • delete( );
    在这里插入图片描述
    要删除的如果是目录,必须是空目录,否则删除失败
	//对文件进行删除,删除的必须是一个空目录
		boolean delete = file.delete();
		System.out.println("是否删除成功"+delete);//是否删除成功true

创建操作

  • mkdir( );这个方法只能创建一级目录
    在这里插入图片描述
  • mkdirs();这个方法可以创建多级目录
    在这里插入图片描述
  • createNewFile( );
    在这里插入图片描述
//创建文件
		File  newfile01 = new File("E:\\newJ2021\\demo");
		//创建一级目录
		boolean mkdir = newfile01.mkdir();
		System.out.println("创建文件"+mkdir);//创建文件true
		
		File  newfile02 = new File("E:\\newJ2021\\demo\\test");
		//创建多级目录
		boolean mkdirs = newfile02.mkdirs();
		System.out.println("创建文件"+mkdirs);//创建文件true
		
		//指定路径创建文件
		File  newfile3 = new File("E:\\newJ2021\\hello.docx");
		try {
			//当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件。
			boolean createNewFile = newfile3.createNewFile();
			System.out.println("创建文件"+createNewFile);//创建文件true
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

查找操作

  • list( );
    在这里插入图片描述
  • list( FilenameFilter filter);
    在这里插入图片描述
  • listFiles( );
    在这里插入图片描述
  • listFiles( FileFilter filter);
    在这里插入图片描述
  • listFiles( FilenameFilter filter);
    在这里插入图片描述
  • listRoots( );
    在这里插入图片描述
//查找,遍历
	@Test
	void test02(){
		/*
		 * 在进行文件查找或者操作之前,
		 * 先判断文件路径所指的文件或者文件夹是否存在
		 */
		File  file = new File("F:\\newJ2021\\StudentManager");
		int  count = 0;
		if(file.exists()) {
			System.out.println("文件或者文件夹存在");
			//获取该文件是目录吗
			if(file.isDirectory()) {
				System.out.println("是一个目录");
				//获取该目录的所有文件和文件夹
				//list方法获取的是文件或者文件夹的字符串形式
				String[] list = file.list();
				for (String  filename : list) {
					count++;
					System.out.println(filename);
				}
				System.out.println("该目录总共有"+count+"个文件");
				
			}else {
				System.out.println("是一个文件");
			}
		}else {
			System.out.println("文件或者文件夹不存在");
		}
	}
	
	
	
	//查找遍历
	@Test
	void test03(){
		//在进行文件查找或者操作之前,先判断文件路径所指的文件或者文件夹是否存在
		File  file = new File("F:\\newJ2021\\StudentManager");
		//获取string的表示形式
		String[] list = file.list();
		System.out.println(list.length);
		//获取该目录下的所有文件,用file来表示
		File[] listFiles = file.listFiles();
		System.out.println(listFiles.length);
	}
	

1、3文件过滤器 FileFilter(函数式接口)

三种方式:

  • 匿名对象法
/*
	 * 匿名对象法
	 */
    @Test
    void  fileFilter01() {
    	//实例化file
    	File  file = new File("F:\\newJ2021\\OOPWork2\\src\\com\\xingyun\\CarDaiLi");
    	
    	//使用过滤器过滤文件,只要java文件
    	File[] files = file.listFiles(new FileFilter() {
            //该方法就是实际进行选择的方法
			@Override
			public boolean accept(File pathname) {
				//先获得文件的名字,进行后缀判断
				if(pathname.getName().endsWith("java")) {
					return true;
				}
				return false;
			}
    	});
    	
    	System.out.println(files.length);
    	for (File file2 : files) {
			System.out.println(file2.getName());
		}
    }
    
  • lambda表达式法
 /*
     * lanbda表达式法
     */
    @Test
    void  fileFilter02() {
    	//实例化file
    	File  file = new File("F:\\newJ2021\\OOPWork2\\src\\com\\xingyun\\CarDaiLi");
    	//使用过滤器进行过滤,只要jpg文件
    	
    	File[] files = file.listFiles((File  name)->{
    		if(name.getName().endsWith("java")) {
    			return true;
    		}
    		return  false;
    	});
    	
    	System.out.println(files.length);
    	for (File file2 : files) {
			System.out.println(file2.getName());
		}
    	
    }
  • 自定义过滤器法
/*
     * 自定义过滤器
     */
    @Test
    void  fileFilter03() {
    	//实例化file
    	File  file = new File("F:\\newJ2021\\OOPWork2\\src\\com\\xingyun\\CarDaiLi");
        File[] files = file.listFiles(new MyFilter());
        System.out.println(files.length);
        for (File file2 : files) {
			System.out.println("文件名称为"+file2.getName());
		}
    }
    


//自定义过滤器
class  MyFilter  implements  FileFilter{

	@Override
	public boolean accept(File pathname) {
		if(pathname.getName().endsWith("java")) {
			return true;
		}
		return  false;
	}
	
}

2、使用递归进行file操作

2、1非递归查找

//获取该路径下所有的java文件
	@Test
	void  fun02() {
		File  file = new File("F:\\java课堂笔记");
		//首先判断文件是否存在
		if(file.exists()) {
			//判断他是一个目录吗
			if(file.isDirectory()) {
				//如果是一个文件夹的话,便遍历这个文件夹下所有的文件,包括文件夹
				File[] listFiles = file.listFiles();
				for (File file2 : listFiles) {
					//判断file2是文件还是文件夹
					if(file2.isDirectory()) {
						//如果是一个文件夹的话,便遍历这个文件夹下所有的文件
						File[] listFiles2 = file2.listFiles();
						//遍历
						for (File file3 : listFiles2) {
							//判断
							if(file3.isDirectory()) {
								//获取所有
								File[] listFiles3 = file3.listFiles();
								for (File file4 : listFiles3) {
									if(file4.getName().endsWith("java")) {
										 System.out.println(file4.getName());
									 }
								}
							}else {
								if(file3.getName().endsWith("java")) {
									 System.out.println(file3.getName());
								 }
							}
						}
					}else {
						if(file2.getName().endsWith("java")) {
							 System.out.println(file2.getName());
						 }
					}
				}
			}
		}
	}

2、2递归查找

public static void main(String[] args) {
		File  file = new File("F:\\J2021");
		getFile(file);
		getFile01(file);
	}
	
	//查找文件的方法
	public  static  void  getFile(File  file) {
		//判断
		if(file.exists()){
			if(file.isDirectory()) {
				//遍历
				File[] listFiles = file.listFiles();
				for (File file2 : listFiles) {
					//递归调用
					getFile(file2);
				}
			}else {
				System.out.println(file.getName());
			}
		}
	}
	
	
	
	//查找所有的java文件
	public  static  void  getFile01(File  file) {
		//判断
		if(file.exists()){
			if(file.isDirectory()) {
				//遍历
				File[] listFiles = file.listFiles();
				for (File file2 : listFiles) {
					//递归调用
					getFile(file2);
				}
			}else {
				if(file.getName().endsWith("java")) {
					System.out.println(file.getName());	
				}
			}
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值