Java File.setReadable () не работает в Windows - PullRequest
0 голосов
/ 27 мая 2019

У меня есть этот код, и я хочу протестировать функцию, когда параметр передает нечитаемый файл.Функция здесь не имеет значения, только тот факт, что 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
    }

В последней строке получен сбой сборки.

Кто-нибудь может помочь мне в этой проблеме?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...