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;
}
}

3195

被折叠的 条评论
为什么被折叠?



