.getFileSystem() .provider() .getFileAttributeView(nioPath, PosixFileAttributeView.class, LinkOption.NOFOLLOW_LINKS).readAttributes();
/** * @param fs * @param file * @return non null attributes object */ static Attributes getFileAttributesBasic(FS fs, File file) { try { Path nioPath = toPath(file); BasicFileAttributes readAttributes = nioPath .getFileSystem() .provider() .getFileAttributeView(nioPath, BasicFileAttributeView.class, LinkOption.NOFOLLOW_LINKS).readAttributes(); Attributes attributes = new Attributes(fs, file, true, readAttributes.isDirectory(), fs.supportsExecute() ? file.canExecute() : false, readAttributes.isSymbolicLink(), readAttributes.isRegularFile(), // readAttributes.creationTime().toMillis(), // readAttributes.lastModifiedTime().toMillis(), readAttributes.isSymbolicLink() ? Constants .encode(readSymLink(file)).length : readAttributes.size()); return attributes; } catch (IOException e) { return new Attributes(file, fs); } }
@Override public <V extends FileAttributeView> V getFileAttributeView(final Path path, final Class<V> type, final LinkOption... options) { return delegate.getFileAttributeView(path, type, options); }
@Override public <V extends FileAttributeView> V getFileAttributeView(final Path path, final Class<V> type, final LinkOption... options) { return wrapped().getFileAttributeView(unwrap(path), type, options); }
@Override public <V extends FileAttributeView> V getFileAttributeView(Path path, Class<V> type, LinkOption... options) { Path r = unroot(path); FileSystemProvider p = provider(r); return p.getFileAttributeView(r, type, options); }
@Override public <V extends FileAttributeView> V getFileAttributeView(Path path, Class<V> type, LinkOption... options) { Path r = unroot(path); FileSystemProvider p = provider(r); return p.getFileAttributeView(r, type, options); }
@Override public <V extends FileAttributeView> V getFileAttributeView(Path path, Class<V> type, LinkOption... options) { Path r = unroot(path); FileSystemProvider p = provider(r); return p.getFileAttributeView(r, type, options); }
@Test public void testGetBasicFileAttributeViewProvider() throws IOException { assertThatThrownBy( () -> FS.provider().getFileAttributeView( otherProviderAbsA(), BasicFileAttributeView.class ) ).isInstanceOf( ProviderMismatchException.class ); }
@Test @Category( Attributes.class ) public void testReadAttributesViewFromNonExistingFile() throws IOException { assertThat( FS.provider().getFileAttributeView( getNonExistingPath(), BasicFileAttributeView.class )).isNotNull(); }
@Test @Category( Attributes.class ) public void testGetLastModifiedAllMethodsDeliverSame() throws IOException { Path path = getFile(); FileTime last0 = Files.getLastModifiedTime( path ); FileTime last1 = FS.provider().readAttributes( path, BasicFileAttributes.class ).lastModifiedTime(); FileTime last2 = (FileTime) FS.provider().readAttributes( path, "basic:lastModifiedTime" ).get( "lastModifiedTime" ); FileTime last3 = FS.provider().getFileAttributeView( path, BasicFileAttributeView.class ).readAttributes().lastModifiedTime(); assertThat( last0 ).isEqualTo( last1 ); assertThat( last1 ).isEqualTo( last2 ); assertThat( last2 ).isEqualTo( last3 ); assertThat( last3 ).isEqualTo( last0 ); }
@Override public <V extends FileAttributeView> V getFileAttributeView(Path path, Class<V> type, LinkOption... options) { BundleFileSystem fs = (BundleFileSystem) path.getFileSystem(); if (path.toAbsolutePath().equals(fs.getRootDirectory())) { // Bug in ZipFS, it will fall over as there is no entry for / // // Instead we'll just give a view of the source (e.g. the zipfile // itself). // Modifying its times is a bit futile since they are likely to be // overriden when closing, but this avoids a NullPointerException // in Files.setTimes(). return Files.getFileAttributeView(fs.getSource(), type, options); } return origProvider(path).getFileAttributeView(fs.unwrap(path), type, options); }
@Test @Category( { Attributes.class, Writable.class, LastAccessTime.class } ) public void testSetLastAccessTimeViaView() throws IOException { FileTime past = FileTime.fromMillis( System.currentTimeMillis() - 100000 ); final Path file = fileTA(); FS.provider().getFileAttributeView( file, BasicFileAttributeView.class ).setTimes( null, past, null ); assertThat( Files.readAttributes( file, BasicFileAttributes.class ).lastAccessTime() ). usingComparator( FileTimeComparator::roughlyComparableTo ).isEqualTo( past ); }
@Test @Category( { Attributes.class, Writable.class, LastModifiedTime.class } ) public void testSetLastModifiedTimeViaView() throws IOException { FileTime past = FileTime.fromMillis( System.currentTimeMillis() - 100000 ); final Path file = getFile(); FS.provider().getFileAttributeView( file, BasicFileAttributeView.class ).setTimes( past, null, null ); assertThat( Files.getLastModifiedTime( file ) ). usingComparator( FileTimeComparator.isWithIn( 2000 ) ).isEqualTo( past ); }
@Test @Category( { Attributes.class, Writable.class, Attributes.class, CreationTime.class } ) public void testSetCreationTimeViaView() throws IOException { FileTime past = FileTime.fromMillis( System.currentTimeMillis() - 100000 ); final Path file = fileTA(); FS.provider().getFileAttributeView( file, BasicFileAttributeView.class ).setTimes( null, null, past ); assertThat( Files.readAttributes( file, BasicFileAttributes.class ).creationTime() ). usingComparator( FileTimeComparator::roughlyComparableTo ).isEqualTo( past ); }
@Test @Category( Attributes.class ) public void testUnsupportedAttributeViewReturnsNull() { assertThat( FS.provider().getFileAttributeView( pathDefault(), UnsiView.class ) ).isNull(); }
@Test @Category( Attributes.class ) public void testReadAttributesViewAndReadFromNonExistingFile() throws IOException { BasicFileAttributeView view = FS.provider().getFileAttributeView( getNonExistingPath(), BasicFileAttributeView.class ); assertThatThrownBy( view::readAttributes ).isInstanceOf( NoSuchFileException.class ); }
@Test( expected = ClosedFileSystemException.class ) @Category( Closable.class ) public void testClosedFSGetBasicFileAttributeViewProvider() throws IOException { getClosedFS(); FS.provider().getFileAttributeView( getClosedFileA(), BasicFileAttributeView.class ); }
static Attributes getFileAttributesPosix(FS fs, File path) { try { Path nioPath = path.toPath(); PosixFileAttributes readAttributes = nioPath .getFileSystem() .provider() .getFileAttributeView(nioPath, PosixFileAttributeView.class, LinkOption.NOFOLLOW_LINKS).readAttributes(); Attributes attributes = new FileUtil.Java7BasicAttributes( fs, path, true, // readAttributes.isDirectory(), // readAttributes.permissions().contains( PosixFilePermission.OWNER_EXECUTE), readAttributes.isSymbolicLink(), readAttributes.isRegularFile(), // readAttributes.creationTime().toMillis(), // readAttributes.lastModifiedTime().toMillis(), readAttributes.size()); return attributes; } catch (NoSuchFileException e) { return new FileUtil.Java7BasicAttributes(fs, path, false, false, false, false, false, 0L, 0L, 0L); } catch (IOException e) { return new Attributes(path, fs); } }
@Test @Category( Attributes.class ) public void testAllGetAttributeMethodsDeliverSame() throws IOException { description.getAttributeDescriptions().forEach( ConsumerE.u( ad -> { Path path = getFile(); for( String key : ad.getAttributeNames() ) { Object val1 = ad.get( FS.provider().readAttributes( path, ad.getReadType() ), key ); Object val2 = FS.provider().readAttributes( path, ad.getName() + ":" + key ).get( key ); Object val3 = ad.get( FS.provider().getFileAttributeView( path, ad.getViewType() ).readAttributes(), key ); assertThat( val1 ).as( "get attribute " + ad.getName() + ":" + key ).isEqualTo( val2 ); assertThat( val2 ).as( "get attribute ${1} : ${2}", ad.getName(), key ).isEqualTo( val3 ); } }) ); }
@Test @Category( { Attributes.class, Writable.class } ) public void testReadAttributesViewFutureExistingFile() throws IOException { BasicFileAttributeView view = FS.provider().getFileAttributeView( absTA(), BasicFileAttributeView.class ); fileTA(); try { view.readAttributes(); } catch( Exception e ) { fail( "future files have a view" ); } }