У меня есть этот код, и я хочу протестировать функцию, когда параметр передает нечитаемый файл.Функция здесь не имеет значения, только тот факт, что File.setReadble (false), кажется, не работает только в Windows.
Класс File
устарел, так как я могу гарантировать, что файл доступен для чтения илине зависит от платформы?
Я тестировал один и тот же код на Linux и Mac, тест работал правильно.
@Test
public void testReadableFile2() {
System.out.println("testReadableFile2");
URL resource = TestClass.class.getResource("/xml/file.xml");
assertNotNull(resource);
Path file = null;
try {
file = Paths.get(resource.toURI());
} catch (final URISyntaxException ex) {
System.out.println("exception: " + ex);
}
assertNotNull(file);
assertTrue(Files.exists(file));
// Query file system
FileStore fileStore = null;
try {
fileStore = Files.getFileStore(file);
} catch (final IOException ex) {
System.out.println("IOException for get file store: " + ex);
}
assertNotNull(fileStore);
boolean isReadable = true;
if (fileStore.supportsFileAttributeView(DosFileAttributeView.class)) {
boolean hadException = false;
try {
// Set read-only
DosFileAttributeView att = Files.getFileAttributeView(file, DosFileAttributeView.class);
att.setReadOnly(true);
isReadable = !att.readAttributes().isReadOnly();
} catch (final IOException ex) {
System.out.println("IOException for set attribute: " + ex);
hadException = true;
}
assertFalse(hadException);
} else if (fileStore.supportsFileAttributeView(PosixFileAttributeView.class)) {
boolean hadException = false;
try {
// Change permissions
PosixFileAttributes attrs = Files.readAttributes(file, PosixFileAttributes.class);
Set<PosixFilePermission> newPermissions = attrs.permissions();
newPermissions.remove(PosixFilePermission.OWNER_READ);
newPermissions.remove(PosixFilePermission.OTHERS_READ);
newPermissions.remove(PosixFilePermission.GROUP_READ);
Files.setPosixFilePermissions(file, newPermissions);
PosixFileAttributeView newAttr = Files.getFileAttributeView(file, PosixFileAttributeView.class);
newAttr.setPermissions(newPermissions);
boolean owner, others, group;
owner = newAttr.readAttributes().permissions().contains(PosixFilePermission.OWNER_READ);
others = newAttr.readAttributes().permissions().contains(PosixFilePermission.OTHERS_READ);
group = newAttr.readAttributes().permissions().contains(PosixFilePermission.GROUP_READ);
isReadable = !owner && !others && !group;
} catch (final IOException ex) {
System.out.println("io exception: " + ex);
hadException = true;
}
assertFalse(hadException);
}
assertFalse(isReadable);
assertFalse(Files.isReadable(file)); // assertion failure here
}
В последней строке получен сбой сборки.
Кто-нибудь может помочь мне в этой проблеме?