Java7中文件IO發(fā)生了很大的變化,專門引入了很多新的類:
import java.nio.file.DirectoryStream;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.FileAttribute;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
在以前的操作中,主要通過File構(gòu)造一個文件,然后將File作為入?yún)?,獲取輸入流等操作。Api的操作不是很流暢。在新的文件IO中,用Path取代了File,用Files作為一個操作類,并且封裝了很多非常實用的Api,看完下面的示例,就會有一個新的理解。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
package filespaths; import org.junit.Test; import java.io.*; import java.net.URI; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.PosixFilePermission; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Stream; /** * @Author kingboy * @Date 2017/4/13 11:05 * @Description Path is used to Path Sample * @email [email protected] */ public class PathTest { private static String separator = File.separator; /** * 構(gòu)建Path */ @Test public void constructon(){ //1.Paths Path path = Paths.get( "/Users/kingboy/Desktop/" ); Path path1 = Paths.get(URI.create( "/Users/kingboy/Desktop/" )); //2.FileSystems Path path2 = FileSystems.getDefault().getPath( "/Users/kingboy/Desktop/" ); //3.File Path path3 = new File( "/Users/kingboy/Desktop/" ).toPath(); } /** * 創(chuàng)建一個空文件/文件夾 * @throws IOException */ @Test public void create() throws IOException { //文件夾 Path path = Paths.get( "/Users/kingboy/Desktop/hello" ); if (!Files.exists(path)){ Files.createDirectory(path); //創(chuàng)建多個目錄 //Files.createDirectories(path); } //文件 Path path1 = Paths.get( "/Users/kingboy/Desktop/helloFile" ); if (Files.exists(path1)){ Files.createFile(path1); } } /** * 文件屬性 */ @Test public void getFileProperties() throws IOException { Path path = 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)); //權(quán)限 System.out.println(Files.size(path)); //文件大小 } /** * 讀取一個文本文件 */ @Test public void readText() throws IOException { Path path = Paths.get( "/Users/kingboy/Desktop/text.txt" ); //通過bufferedReader讀取 BufferedReader bufferedReader = Files.newBufferedReader(path, StandardCharsets.UTF_8); //文件編碼 StringBuilder sb = new StringBuilder(); String tempString = null ; while ((tempString = bufferedReader.readLine())!= null ){ sb = sb.append(tempString); } System.out.println(sb); //通過Files方法readAllLines List<String> strings = Files.readAllLines(path); strings.forEach(s -> System.out.print(s)); //輸出結(jié)果 //adsfasdfasdfadsfasdfgsdfsdffsdfsdf //adsfasdfasdfadsfasdfgsdfsdffsdfsdf } /** * 拿到文件輸入流 * @throws IOException */ @Test public void getInputStream() throws IOException { Path path = Paths.get( "/Users/kingboy/Desktop/text.txt" ); InputStream inputStream = Files.newInputStream(path); } /** * 文件寫操作 */ @Test public void writeFile() throws IOException { Path path = Paths.get( "/Users/kingboy/Desktop/writeFile" ); BufferedWriter bufferedWriter = Files.newBufferedWriter(path); String str = "write file test" ; bufferedWriter.write(str); bufferedWriter.flush(); bufferedWriter.close(); } /** * 遍歷一個文件夾 */ @Test public void traverseDirectory() throws IOException { Path path = Paths.get( "/Users/kingboy/Desktop/" ); Stream<Path> list = Files.list(path); list.forEach(p -> { System.out.println(p.getFileName()); }); } /** * 遍歷文件樹 */ @Test public void traverseTree() throws IOException { Path path = Paths.get( "/Users/kingboy/Desktop/" ); Stream<Path> walk = 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());//文件系統(tǒng) }); //還有種方式Files.walkFileTree() } /** * 文件復(fù)制 */ @Test public void copyFile() throws IOException { Path path = Paths.get( "/Users/kingboy/Desktop/text.txt" ); Path path2 = Paths.get( "/Users/kingboy/Desktop/hello.txt" ); Files.copy(path,path2); } /** * 讀取權(quán)限見上面示例,設(shè)置權(quán)限 */ @Test public void writePermission() throws IOException { Path path = Paths.get( "/Users/kingboy/Desktop/text.txt" ); Set<PosixFilePermission> permissionSet = new HashSet<>(); permissionSet.add(PosixFilePermission.GROUP_WRITE); permissionSet.add(PosixFilePermission.OWNER_EXECUTE); Files.setPosixFilePermissions(path,permissionSet); } //還有很多其他操作Api,自己查看方法名,很容易就能分辨出功能。 } |
希望本篇文章對需要的朋友有幫助