-
Notifications
You must be signed in to change notification settings - Fork 126
Expand file tree
/
Copy pathFileUtil.java
More file actions
153 lines (137 loc) · 4.1 KB
/
FileUtil.java
File metadata and controls
153 lines (137 loc) · 4.1 KB
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
/*
* Copyright © 2016-2025 The LmdbJava Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.lmdbjava;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.FileVisitOption;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.NotDirectoryException;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.EnumSet;
import java.util.function.Consumer;
import java.util.stream.Stream;
final class FileUtil {
private FileUtil() {}
static Path createTempDir() {
try {
return Files.createTempDirectory("lmdbjava");
} catch (final IOException e) {
throw new UncheckedIOException(e);
}
}
static Path createTempFile() {
try {
return Files.createTempFile("lmdbjava", "db");
} catch (final IOException e) {
throw new UncheckedIOException(e);
}
}
static void useTempDir(final Consumer<Path> consumer) {
Path path = null;
try {
path = createTempDir();
consumer.accept(path);
} finally {
if (path != null) {
deleteDir(path);
}
}
}
static void useTempFile(final Consumer<Path> consumer) {
Path path = null;
try {
path = createTempFile();
consumer.accept(path);
} finally {
if (path != null) {
deleteIfExists(path);
}
}
}
public static long size(final Path path) {
try {
return Files.size(path);
} catch (final IOException e) {
throw new UncheckedIOException(e);
}
}
public static void delete(final Path path) {
try {
Files.delete(path);
} catch (final IOException e) {
throw new UncheckedIOException(e);
}
}
public static void deleteDir(final Path path) {
if (path != null && Files.isDirectory(path)) {
recursiveDelete(path);
deleteIfExists(path);
}
}
private static void recursiveDelete(final Path path) {
try {
Files.walkFileTree(
path,
EnumSet.of(FileVisitOption.FOLLOW_LINKS),
Integer.MAX_VALUE,
new FileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(
final Path dir, final BasicFileAttributes attrs) throws IOException {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(final Path file, final IOException exc)
throws IOException {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) {
deleteIfExists(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(final Path dir, final IOException exc) {
if (!dir.equals(path)) {
deleteIfExists(dir);
}
return FileVisitResult.CONTINUE;
}
});
} catch (final NotDirectoryException e) {
// Ignore.
} catch (final IOException e) {
throw new UncheckedIOException(e);
}
}
private static void deleteIfExists(final Path path) {
try {
Files.deleteIfExists(path);
} catch (final IOException e) {
throw new UncheckedIOException(e);
}
}
public static long count(final Path path) {
try (final Stream<Path> stream = Files.list(path)) {
return stream.count();
} catch (final IOException e) {
throw new UncheckedIOException(e);
}
}
}