File类:用于访问磁盘的“目录”或“文件”
Files:工具类,提供“常规”的目录或文件按的工具方法
File.listRoots():获取当前硬盘中的所有分区
File[] roots = File.listRoots();
创建File对象时,必须传入目录(文件)的路径
获取目录的相关信息
//每个目录都是一个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());
进获取子文件(音乐文件)
package com.xn.Mon;
import java.io.File;
import java.io.FileFilter;
public class Mon03 {
public static void main(String[] args) {
File dir=new File("D:\\Test\\music");
//进获取子文件(音乐文件)
File[] listFiles=dir.listFiles(new FileFilter() {
@Override
public boolean accept(File f) {
//每个文件传入
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());
}
}
}
创建目录
package com.xn.Mon;
import java.io.File;
public class Mon04 {
public static void main(String[] args) {
//创建目录
//创建单层目录
//传入一个目录路径(不能存在的)
File dir1=new File("D:\\Test\\music\\02");
boolean ismkdir=dir1.mkdir();
System.out.println(dir1.getName()+"创建"+ismkdir);
//创建多层目录
File dir2=new File("D:\\Test\\music\\03\\aa\\bb");
dir2.mkdirs();
}
}
创建文件
package com.xn.Mon;
import java.io.File;
import java.io.IOException;
public class Mon05 {
public static void main(String[] args) {
//创建文件
File f=new File("D:\\Test\\music\\03\\yoyo.mp3");
try {
f.createNewFile();
}catch(IOException e){
e.printStackTrace();
}
}
}
文件的复制
package com.xn.Mon;
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 Mon07 {
public static void main(String[] args) {
//文件的复制
//Files.copy(source, target,options);
try {
//源文件路径
File sourcefile = new File("D:\\Test\\music");
Path source = sourcefile.toPath();
//目标文件路径
Path target = Paths.get("D:\\Test\\music\\01\\歌曲.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.xn.Mon;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class Mon08 {
public static void main(String[] args) {
//读取文件内容(文本文件)
try {
//读取文本文件中的内容
List<String> lines=Files.readAllLines(Paths.get("D:\\Test\\music\\LICENSE"));
for(String ln:lines) {
System.out.println(ln);
}
}catch(IOException e) {
e.printStackTrace();
}
}
}
写入文件(文木文件)
package com.xn.Mon;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.OpenOption;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
public class Mon09 {
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\\city.txt"), list,Charset.forName("utf-8") );
}catch(IOException e) {
e.printStackTrace();
}
//案例2
//写入文件,内容来自一个字节数组
try {
//byte[] array1={65,66,67,68,69}
byte[] array2="床前明月光疑是地上霜".getBytes();
//覆盖原来的内容
//Files.write(Paths.get("D:\\Test\\music\\city.txt"), array2)
Files.write(Paths.get("D:\\Test\\music\\city1.txt"), array2, StandardOpenOption.CREATE_NEW);
}catch(IOException e) {
e.printStackTrace();
}
}
}
获取当前目录下的所有子文件和子目录
package com.xn.Mon;
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 Mon10 {
public static void main(String[] args) {
// 深度遍历文件目录
File root = new File("D:\\Test");
// 方式1:递归的方式
// showFiles1(root);
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();
try {
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();
}
}
}