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() {@Overridepublic 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 blocke.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() {@Overridepublic 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 blocke.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类型)// ListArrayList<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;
// }@Overridepublic FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {System.out.println(dir);// 打印目录return FileVisitResult.CONTINUE;}// 处理文件@Overridepublic 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>() {@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {//判断如果是MP3文件if(file.toFile().getName().endsWith(".mp3")) {//添加至集合mp3FileList.add(file.toFile());}return FileVisitResult.CONTINUE;}//访问文件出错时,继续遍历@Overridepublic 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;}}