IO流_File1_对文件的操作_对目录的操作.菜鸡自学java_day.24

本文深入讲解Java中的File类,包括其常量、构造方法、基本操作及文件过滤器的使用,并提供递归输出文件夹内所有文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.File中的两个常量:

static StringpathSeparator
与系统相关的路径分隔符字符,为方便起见,表示为字符串。 
static Stringseparator
与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串
package IO01;

import java.io.File;

/**
 * 两个常量
 * 
 * 1、路径分隔符  ;  File.pathSeparator
 * 2、名称分隔符 \(windows)  /(linux 等)  File.separator
 * 
 * 
 * @author Wang
 *
 */

public class Demo01 {
	public static void main(String[] args) {
		System.out.println(File.pathSeparator);
		System.out.println(File.separator);
		//路径表示形式
		String path ="E:\\xp\\test\\2.jpg";  //这里有两个\\是因为一个是转义字符
		
		path="E:"+File.separator+"xp"+File.separator+"test"+File.separator+"2.jpg"; //这种方式可以用于跨平台上
		
		//推荐方式
		path="E:/xp/test/2.jpg";
	}
}

2.构造方法

File(File parent, String child)
从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname)
通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child)
从父路径名字符串和子路径名字符串创建新的 File实例。
File(URI uri)
通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。 

package IO01;

import java.io.File;

/**
 * 
 * 相对路径与绝对路径构造 File对象
 * 1、相对路径
 *   File(String parent, String child)  ==>File("E:/xp/test","2.jpg")
 *   File(File parent, String child)    ==> File(new File("E:/xp/test"),"2.jpg")
 * 2、绝对路径
 *   File(String name);
 * 
 * 
 * @author Wang
 *
 */

public class Demo02 {
	public static void main(String[] args) {
		String parentPath ="F:/xp/test";
		String name ="2.jpg";
		//相对路径
		File src =new File(parentPath,name);
		src =new File(new File(parentPath),name);
		//输出
		System.out.println(src.getName());
		System.out.println(src.getPath());
		//绝对路径
		src =new File("F:/xp/test/2.jpg");
		System.out.println(src.getName());
		System.out.println(src.getPath());
		//没有盘符: 以你当前的工作区构建
		src =new File("test.txt");
		src =new File(".");
		System.out.println(src.getName());
		System.out.println(src.getPath());
		System.out.println(src.getAbsolutePath());//这个方法是是获得绝对路径
	}
}

3.File的基本操作:

package IO01;

import java.io.File;
import java.io.IOException;

/**
 * 
 * 测试File的常用方法
 * 
 * @author Wang
 *
 */

public class Demo03 {
	
	public static void main(String[] args) throws IOException, InterruptedException {
		//test01();
		//test02();
		test03();
	}
	
	
	public static void test01(){   //关于文件名
		//File file =new File("F:/testIO/2.txt");
		//File file =new File("testIO/2.txt");
		File file =new File("2.txt");
		System.out.println(file.getName()); //返回名称
		System.out.println(file.getPath()); //如果是绝对路径,返回完整路径,否则相对路径
		System.out.println(file.getAbsolutePath());//返回绝对路径
		System.out.println(file.getParent());//返回上一级目录,如果是相对,返回null
	}
	
	
	public static void test02() {  //输出文件的信息  这里的信息指的是文件属性里面的信息
		System.out.println("============++++++++++++");
		
		String path ="F:/testIO/200.txt";
		File file =new File(path);
	
		System.out.println("文件是否存在:"+file.exists());	//判断文件是否存在
		
		System.out.println("文件是否可写"+file.canWrite()); //判断文件是否可读 写 canWrite() canRead()
		
		System.out.println("============++++++++++++");
		
		//判断是不是文件    isFile()
		//判断是不是文件夹  isDirectory()
		if(file.isFile()){
			System.out.println("文件");
		}else if(file.isDirectory()){			
			System.out.println("文件夹");
		}else{
			System.out.println("文件不存在");
		}
				
		System.out.println("是否为绝对路径"+file.isAbsolute());
		System.out.println("长度为:"+file.length());  //这里输出的是文件属性里面的长度
	}
	
	
	public static void test03() throws IOException, InterruptedException {
		//createNewFile()                        //不存在创建新文件    存在就不创建文件了会返回false
		String path="F:/testIO/200.txt";
		
		File file =new File(path);
		
		if(!file.exists()){
			boolean flag;
			flag = file.createNewFile();
			System.out.println(flag?"成功":"失败");
		}
				
		//删除文件
		boolean flag =file.delete();
		System.out.println(flag?"成功":"失败");
				
				
		//static createTempFile(前缀3个字节长,后缀默认.temp) 默认临时空间
		//static createTempFile(前缀3个字节长,后缀默认.temp,目录)
		File temp= File.createTempFile("tes", ".temp",new File("F:/testIO"));		//创建临时文件
		Thread.sleep(10000);    //这句话我们已经用过很多次了  就是让系统睡眠10000毫秒  所以你会在这里看见一个存在10s的文件		
		temp.deleteOnExit(); //退出即删除   
	}
	
	
	
	
	
	
	
}
4. Interface FilenameFilter

  • accept
    boolean accept(File dir,
                   String name)
    测试指定文件是否应包含在文件列表中。
    参数
    dir - 找到该文件的目录。
    name - 文件的名称。
    结果
    true当且仅当该名称应包含在文件列表中时; false否则。

5.下面是对文件的操作:

package IO01;

import java.io.File;
import java.io.FilenameFilter;

/**
 * 
 * 对目录的操作
 * 
 * @author Wang
 *
 */

public class Demo04 {
	
	public static void main(String[] args) {
		
		String path ="F:/testIO/";
		File file =new File(path);    //与文件夹建立链接
		
		if(file.isDirectory()){       //存在并且为目录
			System.out.println("======子目录|文件名===");
			String[] subNames =file.list();  //这个方法返回的是一个String数组【输出为文件的名字】   作用是输出他这个目录下的所有文件
			
			for(String temp:subNames){       //遍历输出
				System.out.println(temp);
			}
			
			
			System.out.println("=====子目录|文件File对象====");
			File[] subFiles =file.listFiles();    //这个方法返回的是一个文件数组【输出的是文件的路径】   作用是输出他这个目录下的所有文件
			for(File temp:subFiles){
				System.out.println(temp.getAbsolutePath());
			}
			
			
			System.out.println("=====子文件.java对象====");
			//命令设计模式
			subFiles =file.listFiles(new FilenameFilter(){  //接口建立对象  使用了匿名内部类   重写接口的方法
					
				@Override
				
				 //dir 代表file
				 
				public boolean accept(File dir, String name) {//这个方法的作用是测试指定文件是否在指定的文件夹中
					//return System.out.println(dir.getAbsolutePath());
					//return  new File(dir,name).getName().endsWith(".java");    //这个会把所有后缀是.java都输出   输出的不一定是文件  可能是个.java的文件夹
					return  new File(dir,name).isFile()&&name.endsWith(".java"); //这里是限制了一下必须是文件
				}
				
			});
			for(File temp:subFiles){
				System.out.println(temp.getAbsolutePath());
			}
			
			
		}	
	}
}
6.输出一个文件夹的所有文件(递归)
package IO01;

import java.io.File;
import java.util.Arrays;

/**
 * 
 * 输出子孙级目录|文件的名称(绝对路径)
 * 1、listFiles()
 * 2、递归
 * 
 * static listRoots() 根路径
 * 
 * @author Wang
 *
 */

public class Demo05 {
	public static void main(String[] args) {
		String path = "F:/testIO";
		File file = new File(path);
		
		printName(file);
		
		File[] roots =File.listRoots();  //这方法的作用是返回一个File的目录里面装的是根目录
		//System.out.println(Arrays.toString(roots));  //这里使用toString来打印   我们再来一个用加强for来遍历
		for(File temp : roots) {
			System.out.println(temp);
		}
		//for(File temp:roots){   打印你计算机的所有文件
		//	printName(temp);
			
		//}
	}
	
	
	
	public static void printName(File file){//我们使用递归来把这个目录里面的文件全部输出
		if(file == null || !file.exists()){ //如果不存在或者是文件夹为空  那么没有往下检索的必要了  递归的结束条件
			return ;
		}
		System.out.println(file.getAbsolutePath()); //输出文件的绝对地址
		
		if(file.isDirectory()){      //这里是递归体    如果这个文件还是一个文件夹  那么遍历输出里面的问价
			for(File temp:file.listFiles()){
				printName(temp);//递归的根本  自己掉自己
			}
			
		}
	}
	
	

}


注意:

1.文件的后缀跟文件的内容没有关系      后缀只是决定了文件要使用什么软件打开;

2.这里的File文件的操作可以是文件也可以是文件夹;

3.File中的length()这个方法是没有办法读取文件夹的长度的;(也可以读取.jpg因为文件的后缀跟文件的内容没有关系      后缀只是决定了文件要使用什么软件打开)

4.接口是没法直接创建对象的   所以我们在用接口创建对象的时候我们就会写一个匿名内部类,然后重写里面的方法就能创建对象了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值