Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.base/share/classes/sun/nio/fs/AbstractFileSystemProvider.java
41159 views
1
/*
2
* Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package sun.nio.fs;
27
28
import java.nio.file.Path;
29
import java.nio.file.LinkOption;
30
import java.nio.file.attribute.BasicFileAttributes;
31
import java.nio.file.spi.FileSystemProvider;
32
import java.io.IOException;
33
import java.util.Map;
34
35
/**
36
* Base implementation class of FileSystemProvider
37
*/
38
39
public abstract class AbstractFileSystemProvider extends FileSystemProvider {
40
protected AbstractFileSystemProvider() { }
41
42
/**
43
* Splits the given attribute name into the name of an attribute view and
44
* the attribute. If the attribute view is not identified then it assumed
45
* to be "basic".
46
*/
47
private static String[] split(String attribute) {
48
String[] s = new String[2];
49
int pos = attribute.indexOf(':');
50
if (pos == -1) {
51
s[0] = "basic";
52
s[1] = attribute;
53
} else {
54
s[0] = attribute.substring(0, pos++);
55
s[1] = (pos == attribute.length()) ? "" : attribute.substring(pos);
56
}
57
return s;
58
}
59
60
/**
61
* Gets a DynamicFileAttributeView by name. Returns {@code null} if the
62
* view is not available.
63
*/
64
abstract DynamicFileAttributeView getFileAttributeView(Path file,
65
String name,
66
LinkOption... options);
67
68
@Override
69
public final void setAttribute(Path file,
70
String attribute,
71
Object value,
72
LinkOption... options)
73
throws IOException
74
{
75
String[] s = split(attribute);
76
if (s[0].isEmpty())
77
throw new IllegalArgumentException(attribute);
78
DynamicFileAttributeView view = getFileAttributeView(file, s[0], options);
79
if (view == null)
80
throw new UnsupportedOperationException("View '" + s[0] + "' not available");
81
view.setAttribute(s[1], value);
82
}
83
84
@Override
85
public final Map<String,Object> readAttributes(Path file, String attributes, LinkOption... options)
86
throws IOException
87
{
88
String[] s = split(attributes);
89
if (s[0].isEmpty())
90
throw new IllegalArgumentException(attributes);
91
DynamicFileAttributeView view = getFileAttributeView(file, s[0], options);
92
if (view == null)
93
throw new UnsupportedOperationException("View '" + s[0] + "' not available");
94
return view.readAttributes(s[1].split(","));
95
}
96
97
/**
98
* Deletes a file. The {@code failIfNotExists} parameters determines if an
99
* {@code IOException} is thrown when the file does not exist.
100
*/
101
abstract boolean implDelete(Path file, boolean failIfNotExists) throws IOException;
102
103
@Override
104
public final void delete(Path file) throws IOException {
105
implDelete(file, true);
106
}
107
108
@Override
109
public final boolean deleteIfExists(Path file) throws IOException {
110
return implDelete(file, false);
111
}
112
113
/**
114
* Tests whether a file is a directory.
115
*
116
* @return {@code true} if the file is a directory; {@code false} if
117
* the file does not exist, is not a directory, or it cannot
118
* be determined if the file is a directory or not.
119
*/
120
public boolean isDirectory(Path file) {
121
try {
122
return readAttributes(file, BasicFileAttributes.class).isDirectory();
123
} catch (IOException ioe) {
124
return false;
125
}
126
}
127
128
/**
129
* Tests whether a file is a regular file with opaque content.
130
*
131
* @return {@code true} if the file is a regular file; {@code false} if
132
* the file does not exist, is not a regular file, or it
133
* cannot be determined if the file is a regular file or not.
134
*/
135
public boolean isRegularFile(Path file) {
136
try {
137
return readAttributes(file, BasicFileAttributes.class).isRegularFile();
138
} catch (IOException ioe) {
139
return false;
140
}
141
}
142
143
/**
144
* Checks the existence of a file.
145
*
146
* @return {@code true} if the file exists; {@code false} if the file does
147
* not exist or its existence cannot be determined.
148
*/
149
public boolean exists(Path file) {
150
try {
151
checkAccess(file);
152
return true;
153
} catch (IOException ioe) {
154
return false;
155
}
156
}
157
158
/**
159
* Returns a path name as bytes for a Unix domain socket.
160
* Different encodings may be used for these names on some platforms.
161
* If path is empty, then an empty byte[] is returned.
162
*/
163
public abstract byte[] getSunPathForSocketFile(Path path);
164
}
165
166