File类和Files类

File类:用于访问磁盘的"目录"或"文件"

Files类:工具类,提供"常规"的目录或文件的工具方法

获取当前硬盘中的所有分区:

每个分区都是一个File类型的对象

package com.ztt.Demo01;

import java.io.File;

//File类和Files类
//File类:用于访问磁盘的"目录"或"文件"
//Files类:工具类,提供"常规"的目录或文件的工具方法
public class demo01 {
	public static void main(String[] args) {
		//获取当前硬盘中的所有分区
		//每个分区都是一个File类型的对象
		File[] roots=File.listRoots();
		
		for(File f : roots) {
			if(f != null) {
				System.out.println("分区名称:"+f.getPath() );
				System.out.println("分区容量:"+f.getTotalSpace()/1024/1024/1024);
				System.out.println("可用容量:"+f.getUsableSpace()/1024/1024/1024);
			}
		}
	}

}

运行结果:

分区名称:C:\
分区容量:150
可用容量:99
分区名称:D:\
分区容量:164
可用容量:144
分区名称:E:\
分区容量:162
可用容量:157
package com.ztt.Demo01;

import java.io.File;

public class demo02 {
	public static void main(String[] args) {
		//每个目录都是一个File类型的对象
		
		//字符串类型的文件路径
		String path="D:\\test\\music";
		//创建File对象时,必须传入目录(文件的路径)
		File dir=new File(path);
		
		//获取目录相关的信息
		System.out.println("目录的路径:"+dir.getPath());
		System.out.println("目录的名称:"+dir.getName());
		
		System.out.println("父目录路径:"+dir.getParent());
		System.out.println("父目录名称:"+dir.getParentFile().getName());
		
		//获取子文件和子目录
		
		//获取所有子文件或子目录
		//每个子文件或子目录都是一个File对象
		File[] listFiles=dir.listFiles();
		for(File f:listFiles) {
			if(f.isDirectory()) {
				//子目录
				System.out.printf("【%s】\n",f.getName());
			}else {
				//子文件
				System.out.printf("%s的文件内容长度是:%d字节\n",f.getName(),f.length());
			}
		}
		
//		System. out.println("了文件和子目录的名称:");
//		//获取所有子文件或子目录的名称
//		String[] listNames = dir.list();
//		for (String name : listNames) {
//			System.out.println(name );
//		}
	}

}

运行结果:

目录的路径:D:\test\music
目录的名称:music
父目录路径:D:\test
父目录名称:test
【001】
【002】
【003】
【004】
Mojito.mp3的文件内容长度是:7640753字节
彩虹.mp3的文件内容长度是:10480397字节
晴天.mp3的文件内容长度是:10793969字节
package com.ztt.Demo01;

import java.io.File;
import java.io.FileFilter;

public class demo03 {
	public static void main(String[] args) {
		File dir=new File("D:\\test\\music");
		//仅获取子文件(音乐文件)
		//File[] listFiles=dir.listFiles();//返回所有的子文件或子目录
		
		//通过FilenameFilter接口进行子文件名称的检查过滤
		// File[] listFiles = dir.listFiles(new FilenameFilter() {..});
		
		//通过FileFilter接口进行子文件的过滤
		//传入子文件或子目录的File对象,进行过滤
		File[] listFiles=dir.listFiles(new FileFilter() {
			
			@Override
			public boolean accept(File f) {
				//每个文件传入
				//System.out.println("再accept()方法中:"+ f.getName());
				if(f.isDirectory() || !f.getName().endsWith(".mp3")) {
					return false;
				}
				return true;
			}
		});
		for(File f:listFiles) {
			System.out.printf("音乐文件%s的长度是:%d字节\n",f.getName(),f.length());
		}
	}

}

运行结果:

音乐文件Mojito.mp3的长度是:7640753字节
音乐文件彩虹.mp3的长度是:10480397字节
音乐文件晴天.mp3的长度是:10793969字节

创建目录 

创建单层目录

传入一个目录路径(该目录路径代表的目录并不存在)

创建多层目录

package com.ztt.Demo01;

import java.io.File;

public class demo04 {
	public static void main(String[] args) {
		//创建目录
		
		//创建单层目录
		//传入一个目录路径(该目录路径代表的目录并不存在)
		File dir1=new File("D:\\test\\music\\003");
		boolean isMkdir=dir1.mkdir();
		System.out.println(dir1.getName()+"创建"+isMkdir);
		
		//创建多层目录
		File dir2=new File("D:\\test\\music\\004\\aaa\\bbb\\ccc");
		dir2.mkdirs();
		
	}

}

运行结果:

003创建false

创建文件

package com.ztt.Demo01;

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

public class demo05 {
	public static void main(String[] args) {
		//创建文件
		File f=new File("D:\\test\\music\\004\\aaa\\bbb\\ccc\\xxx.mp3");
		
			try {
				f.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
				
	}

}
package com.ztt.Demo01;

import java.io.File;
import java.io.FileFilter;
import java.util.HashMap;
import java.util.Map.Entry;

public class demo06 {
	public static void main(String[] args) {
		HashMap<String, File> mp3FileMap=readMp3Files();
		
		for(Entry<String, File> entry:mp3FileMap.entrySet()) {
			System.out.printf("音乐名称:%s\t",entry.getKey());
			System.out.printf("音乐文件路径:%s",entry.getValue().getPath());
			System.out.println();
		}
		
	}
	
	//读取指定目录中的所有MP3文件,并保存至Map
	//key :音乐名称(不含后缀名)
	//value :音乐文件对象
	
	public static HashMap<String, File> readMp3Files(){
		File dir=new File("D:\\test\\music");
		File[] files=dir.listFiles(new FileFilter() {
			
			@Override
			public boolean accept(File f) {
				if(f.isDirectory() || !f.getName().endsWith(".mp3")) {
					return false;
				}
				return true;
			}
		});
		
		//遍历File[]数组,重新保存至Map中
		HashMap<String, File> fileMap = new HashMap<String,File>();
		for (File f : files) {
			//获取文件名称(含后缀名)
			String fileName = f.getName();
			
			//计算key(不含后缀名的文件名称)
			String key = fileName.substring(0,fileName.indexOf("."));
			fileMap.put( key,f);
		}
		return fileMap;

	}

}

运行结果:

音乐名称:晴天	音乐文件路径:D:\test\music\晴天.mp3
音乐名称:彩虹	音乐文件路径:D:\test\music\彩虹.mp3
音乐名称:Mojito	音乐文件路径:D:\test\music\Mojito.mp3

创建文件路径: 

package com.ztt.Demo01;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;

public class demo07 {
	public static void main(String[] args) {
		
		//创建文件路径
		//方式1:
		Path path1=Paths.get("D:\\test\\music\\Mojito.mp3");
		System.out.println(path1);
		
		//方式2:
		File f=new File("D:\\test\\music\\Mojito.mp3");
		Path path2=f.toPath();
		System.out.println(path2);
	}

}

运行结果:

D:\test\music\Mojito.mp3
D:\test\music\Mojito.mp3

文件的复制 

package com.ztt.Demo01;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

public class demo08 {
	public static void main(String[] args) {
	
		//文件的复制
		//Files.copy(in, target, options)
		try {
		//源文件路径
		File sourceFile = new File("D:\\test\\music\\彩虹.mp3" );
		Path source = sourceFile.toPath( );
		//目标文件路径
		Path target = Paths.get("D:\\test\\music\\001\\caihong.mp3");
		
		//复制
		//仅复制一次,不允许重复复制
		
		//Files.copy( source, target);
		//Files.copy(source, target, StandardCopyOption.COPY_ATTRIBUTES);
		//复制多次,允许重复复制
		Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
	}catch(IOException e) {
		e.printStackTrace();
	}

}

}

读取文件内容(文本文件)

package com.ztt.Demo01;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class demo09 {
	public static void main(String[] args) {
		//读取文件内容(文本文件)
		//Files.readAllLines(path) ;
		
		try {
			//读取文本文件中的所有文本内容
			List<String> lines=Files.readAllLines(Paths.get("D:\\test\\LICENSE"));
			for(String ln:lines) {
				System.out.println(ln);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

写入文件(文本文件) 

package com.ztt.Demo01;

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;

public class demo10 {
	public static void main(String[] args) {
		// 写入文件(文本文件) 
		// Files.write(path, lines, options);
		// Files.write(path,字节数组,options);
		// Files.write(path,Collection单例集合,指定字符编码集,options);
	
		// 案例1
		// 写入文件,内容来自一个集合
		
		try {
			// 一个保存若个字符串的单例集合(Collection类型)
			
			// List
			ArrayList<String> list = new ArrayList<String>();
			list.addAll(Arrays.asList("北京","上海","西安"));
			
			// Set
//			HashSet<String> set = new HashSet<String>();
//			set.addAll(Arrays.asList("成都","重庆","贵阳"));
			
			// 将集合的内容写入文本文件
			Files.write(Paths.get("D:\\test\\music\\002\\city.txt"), 
					list,Charset.forName("utf-8"),// 设置指定字符编码集
					StandardOpenOption.APPEND);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		
		// 案例2
		// 写入文件,内容来自一个字节数组
		
		try {
			
			//byte[] array1 = {65,66, 67,68,69};
			
			byte[] array2 ="十年生死两茫茫不思量自难忘".getBytes();
			
			// 覆盖原内容
//			Files.write(Paths.get("D:\\test\\music\\002\\20240129.txt"),array1);
			
			// 追加原内容
			Files.write(Paths.get("D:\\test\\music\\002\\20240129.txt"),
					array2,StandardOpenOption.APPEND);
		} catch (IOException e2) {
			e2.printStackTrace();
		}
	}
}


 深度遍历文件

方式1:递归的方式

 方式2:使用Files工具类

package com.ztt.Demo01;

import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;

public class demo11 {
	public static void main(String[] args) {
		// 深度遍历文件
		File root = new File("D:\\test");
		// 方式1:递归的方式
		// ShowFiles1(root);
		// 方式2:使用Files工具类
		ShowFiles2(root);
	}
	
	private static void ShowFiles1(File dir) {
		System.out.println(dir);
		// 获取当前目录下的所有子文件或子目录
		File[] listFiles = dir.listFiles();
		// 遍历所有子目录或子文件
		if(listFiles != null) {
			for(File f : listFiles) {
				if(f.isDirectory()) {
					// 如果是目录,递归调用
					ShowFiles1(f);
				}else if(f.isFile()) {
					// 如果是文件,打印文件内容
					System.out.println(f);
				}
			}
		}
	}
	private static void ShowFiles2(File dir) {
		Path start = dir.toPath();
		//  SimpleFileVisitor类的匿名子类
		try {
			// 参数1: start代表开始路径
			// 参数2: FileVisitor接口实现类对象
			//		  (提供SimpleFileVisitor实现子类)
			Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
				// 处理目录
//				@Override
//				public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
//					System.out.println(dir); // 打印目录
//					return FileVisitResult.CONTINUE;
//				}
				@Override
				public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
					System.out.println(dir);// 打印目录
					return FileVisitResult.CONTINUE;
				}
				// 处理文件
				@Override
				public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
					System.out.println(file);
					return FileVisitResult.CONTINUE;
				}
			});
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

运行结果:

D:\test
D:\test\21级.txt
D:\test\LICENSE
D:\test\music
D:\test\music\001
D:\test\music\001\caihong.mp3
D:\test\music\002
D:\test\music\002\20240129.txt
D:\test\music\002\city.txt
D:\test\music\003
D:\test\music\004
D:\test\music\004\aaa
D:\test\music\004\aaa\bbb
D:\test\music\004\aaa\bbb\ccc
D:\test\music\004\aaa\bbb\ccc\xxx.mp3
D:\test\music\Mojito.mp3
D:\test\music\彩虹.mp3
D:\test\music\晴天.mp3
D:\test\幸运儿.txt
package com.ztt.Demo01;

import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;

public class demo12 {
	public static void main(String[] args) {
HashMap<String, File> mp3FileMap=readMp3Files();
		
		for(Entry<String, File> entry:mp3FileMap.entrySet()) {
			System.out.printf("音乐名称:%s\t",entry.getKey());
			System.out.printf("音乐文件路径:%s",entry.getValue().getPath());
			System.out.println();
		}
		
	}
	
	//读取指定目录中的所有MP3文件,并保存至Map
	//key :音乐名称(不含后缀名)
	//value :音乐文件对象
	
	public static HashMap<String, File> readMp3Files(){
		File dir=new File("D:\\");
		
		//保存查找到的mp3文件
		ArrayList<File> mp3FileList=new ArrayList<File>();
		
		try {
			Files.walkFileTree(dir.toPath(), new SimpleFileVisitor<Path>() {
				@Override
				public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
					//判断如果是MP3文件
					if(file.toFile().getName().endsWith(".mp3")) {
						//添加至集合
						mp3FileList.add(file.toFile());
				
				}
				return FileVisitResult.CONTINUE;
		
			}
			
			//访问文件出错时,继续遍历
			@Override
			public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
				
				return FileVisitResult.CONTINUE;
			}
		
		});
		} catch (IOException e) {
			e.printStackTrace();
	}

		//遍历File[]数组,重新保存至Map中
		HashMap<String, File> fileMap = new HashMap<String,File>();
		for (File f : mp3FileList) {
			//获取文件名称(含后缀名)
			String fileName = f.getName();
			
			//计算key(不含后缀名的文件名称)
			String key = fileName.substring(0,fileName.indexOf("."));
			fileMap.put( key,f);
		}
		return fileMap;

	}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值