java文件操作之Path,Paths,Files
Java7中文件IO发生了很大的变化,专门引入了很多新的类:
importjava.nio.file.DirectoryStream;
importjava.nio.file.FileSystem;
importjava.nio.file.FileSystems;
importjava.nio.file.Files;
importjava.nio.file.Path;
importjava.nio.file.Paths;
importjava.nio.file.attribute.FileAttribute;
importjava.nio.file.attribute.PosixFilePermission;
importjava.nio.file.attribute.PosixFilePermissions;
在以前的操作中,主要通过File构造一个文件,然后将File作为入参,获取输入流等操作。Api的操作不是很流畅。在新的文件IO中,用Path取代了File,用Files作为一个操作类,并且封装了很多非常实用的Api,看完下面的示例,就会有一个新的理解。
packagefilespaths;
importorg.junit.Test;
importjava.io.*;
importjava.net.URI;
importjava.nio.charset.StandardCharsets;
importjava.nio.file.FileSystems;
importjava.nio.file.Files;
importjava.nio.file.Path;
importjava.nio.file.Paths;
importjava.nio.file.attribute.PosixFilePermission;
importjava.util.HashSet;
importjava.util.List;
importjava.util.Set;
importjava.util.stream.Stream;
/**
*@Authorkingboy
*@Date2017/4/1311:05
*@DescriptionPathisusedtoPathSample
*@emailkingboyworld@163.com
*/
publicclassPathTest{
privatestaticStringseparator=File.separator;
/**
*构建Path
*/
@Test
publicvoidconstructon(){
//1.Paths
Pathpath=Paths.get("/Users/kingboy/Desktop/");
Pathpath1=Paths.get(URI.create("/Users/kingboy/Desktop/"));
//2.FileSystems
Pathpath2=FileSystems.getDefault().getPath("/Users/kingboy/Desktop/");
//3.File
Pathpath3=newFile("/Users/kingboy/Desktop/").toPath();
}
/**
*创建一个空文件/文件夹
*@throwsIOException
*/
@Test
publicvoidcreate()throwsIOException{
//文件夹
Pathpath=Paths.get("/Users/kingboy/Desktop/hello");
if(!Files.exists(path)){
Files.createDirectory(path);
//创建多个目录
//Files.createDirectories(path);
}
//文件
Pathpath1=Paths.get("/Users/kingboy/Desktop/helloFile");
if(Files.exists(path1)){
Files.createFile(path1);
}
}
/**
*文件属性
*/
@Test
publicvoidgetFileProperties()throwsIOException{
Pathpath=Paths.get("/Users/kingboy/Desktop/text.txt");
System.out.println(Files.getLastModifiedTime(path));//最后修改时间
System.out.println(Files.getOwner(path));//拥有者
System.out.println(Files.getPosixFilePermissions(path));//权限
System.out.println(Files.size(path));//文件大小
}
/**
*读取一个文本文件
*/
@Test
publicvoidreadText()throwsIOException{
Pathpath=Paths.get("/Users/kingboy/Desktop/text.txt");
//通过bufferedReader读取
BufferedReaderbufferedReader=Files.newBufferedReader(path,StandardCharsets.UTF_8);//文件编码
StringBuildersb=newStringBuilder();
StringtempString=null;
while((tempString=bufferedReader.readLine())!=null){
sb=sb.append(tempString);
}
System.out.println(sb);
//通过Files方法readAllLines
Liststrings=Files.readAllLines(path);
strings.forEach(s->System.out.print(s));
//输出结果
//adsfasdfasdfadsfasdfgsdfsdffsdfsdf
//adsfasdfasdfadsfasdfgsdfsdffsdfsdf
}
/**
*拿到文件输入流
*@throwsIOException
*/
@Test
publicvoidgetInputStream()throwsIOException{
Pathpath=Paths.get("/Users/kingboy/Desktop/text.txt");
InputStreaminputStream=Files.newInputStream(path);
}
/**
*文件写操作
*/
@Test
publicvoidwriteFile()throwsIOException{
Pathpath=Paths.get("/Users/kingboy/Desktop/writeFile");
BufferedWriterbufferedWriter=Files.newBufferedWriter(path);
Stringstr="writefiletest";
bufferedWriter.write(str);
bufferedWriter.flush();
bufferedWriter.close();
}
/**
*遍历一个文件夹
*/
@Test
publicvoidtraverseDirectory()throwsIOException{
Pathpath=Paths.get("/Users/kingboy/Desktop/");
Streamlist=Files.list(path);
list.forEach(p->{
System.out.println(p.getFileName());
});
}
/**
*遍历文件树
*/
@Test
publicvoidtraverseTree()throwsIOException{
Pathpath=Paths.get("/Users/kingboy/Desktop/");
Streamwalk=Files.walk(path);
walk.forEach(path1->{
//System.out.println(path1.getRoot());//根目录
System.out.println(path1.getFileName());//文件名
//System.out.println(path1.getParent());//上级目录
//System.out.println(path1.getFileSystem());//文件系统
});
//还有种方式Files.walkFileTree()
}
/**
*文件复制
*/
@Test
publicvoidcopyFile()throwsIOException{
Pathpath=Paths.get("/Users/kingboy/Desktop/text.txt");
Pathpath2=Paths.get("/Users/kingboy/Desktop/hello.txt");
Files.copy(path,path2);
}
/**
*读取权限见上面示例,设置权限
*/
@Test
publicvoidwritePermission()throwsIOException{
Pathpath=Paths.get("/Users/kingboy/Desktop/text.txt");
SetpermissionSet=newHashSet<>();
permissionSet.add(PosixFilePermission.GROUP_WRITE);
permissionSet.add(PosixFilePermission.OWNER_EXECUTE);
Files.setPosixFilePermissions(path,permissionSet);
}
//还有很多其他操作Api,自己查看方法名,很容易就能分辨出功能。
}
希望本篇文章对需要的朋友有帮助