java文件操作之Path,Paths,Files

2025-05-29 0 66

Java7中文件IO发生了很大的变化,专门引入了很多新的类:

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构造一个文件,然后将File作为入参,获取输入流等操作。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 kingboyworld@163.com

*/

public class PathTest {

private static String separator = File.separator;

/**

* 构建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();

}

/**

* 创建一个空文件/文件夹

* @throws IOException

*/

@Test

public void create() throws IOException {

//文件夹

Path path = Paths.get("/Users/kingboy/Desktop/hello");

if(!Files.exists(path)){

Files.createDirectory(path);

//创建多个目录

//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));//权限

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

//输出结果

//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());//文件系统

});

//还有种方式Files.walkFileTree()

}

/**

* 文件复制

*/

@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);

}

/**

* 读取权限见上面示例,设置权限

*/

@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,自己查看方法名,很容易就能分辨出功能。

}

希望本篇文章对需要的朋友有帮助

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java文件操作之Path,Paths,Files https://www.kuaiidc.com/117283.html

相关文章

猜你喜欢
发表评论
暂无评论