7015391: (zipfs) Update zip provider for 1/2011 changes
7014948: (zipfs) ZipFileSystem.newFileSystem(Path...) should not throw FileSystemAlreadyExistsException
7015139: (zipfs) ZipPath.delete() should throw DirectoryNotEmptyException when handling "real, non-empty" dir
Summary: zip filesystem provider update
Reviewed-by: alanb
--- a/jdk/make/mkdemo/Makefile Tue Feb 01 21:00:09 2011 +0530
+++ b/jdk/make/mkdemo/Makefile Tue Feb 01 14:20:01 2011 -0800
@@ -31,7 +31,7 @@
PRODUCT = demos
include $(BUILDDIR)/common/Defs.gmk
-SUBDIRS = jni
+SUBDIRS = jni nio
SUBDIRS_desktop = applets jfc
SUBDIRS_management = management
SUBDIRS_misc = scripting
--- a/jdk/src/share/demo/nio/zipfs/Demo.java Tue Feb 01 21:00:09 2011 +0530
+++ b/jdk/src/share/demo/nio/zipfs/Demo.java Tue Feb 01 14:20:01 2011 -0800
@@ -33,6 +33,7 @@
import java.nio.*;
import java.nio.channels.*;
import java.nio.file.*;
+import java.nio.file.spi.*;
import java.nio.file.attribute.*;
import java.net.*;
import java.text.DateFormat;
@@ -144,16 +145,17 @@
}
public static void main(String[] args) throws Throwable {
+ FileSystemProvider provider = getZipFSProvider();
+ if (provider == null) {
+ System.err.println("ZIP filesystem provider is not installed");
+ System.exit(1);
+ }
Action action = Action.valueOf(args[0]);
Map<String, Object> env = env = new HashMap<>();
if (action == Action.create)
env.put("create", "true");
- if (action == Action.tlist || action == Action.twalk)
- env.put("buildDirTree", true);
- FileSystem fs = FileSystems.newFileSystem(Paths.get(args[1]), env, null);
-
- try {
+ try (FileSystem fs = provider.newFileSystem(Paths.get(args[1]), env)) {
FileSystem fs2;
Path path, src, dst;
boolean isRename = false;
@@ -161,61 +163,59 @@
case rename:
src = fs.getPath(args[2]);
dst = fs.getPath(args[3]);
- src.moveTo(dst);
+ Files.move(src, dst);
break;
case moveout:
src = fs.getPath(args[2]);
dst = Paths.get(args[3]);
- src.moveTo(dst);
+ Files.move(src, dst);
break;
case movein:
src = Paths.get(args[2]);
dst = fs.getPath(args[3]);
- src.moveTo(dst);
+ Files.move(src, dst);
break;
case copy:
src = fs.getPath(args[2]);
dst = fs.getPath(args[3]);
- src.copyTo(dst);
+ Files.copy(src, dst);
break;
case copyout:
src = fs.getPath(args[2]);
dst = Paths.get(args[3]);
- src.copyTo(dst);
+ Files.copy(src, dst);
break;
case copyin:
src = Paths.get(args[2]);
dst = fs.getPath(args[3]);
- src.copyTo(dst);
+ Files.copy(src, dst);
break;
case copyin_attrs:
src = Paths.get(args[2]);
dst = fs.getPath(args[3]);
- src.copyTo(dst, COPY_ATTRIBUTES);
+ Files.copy(src, dst, COPY_ATTRIBUTES);
break;
case copyout_attrs:
src = fs.getPath(args[2]);
dst = Paths.get(args[3]);
- src.copyTo(dst, COPY_ATTRIBUTES);
+ Files.copy(src, dst, COPY_ATTRIBUTES);
break;
case zzmove:
- fs2 = FileSystems.newFileSystem(Paths.get(args[2]), env, null);
- //sf1.getPath(args[3]).moveTo(fs2.getPath(args[3]));
- z2zmove(fs, fs2, args[3]);
- fs2.close();
+ try (fs2 = provider.newFileSystem(Paths.get(args[2]), env)) {
+ z2zmove(fs, fs2, args[3]);
+ }
break;
case zzcopy:
- fs2 = FileSystems.newFileSystem(Paths.get(args[2]), env, null);
- //sf1.getPath(args[3]).copyTo(fs2.getPath(args[3]));
- z2zcopy(fs, fs2, args[3]);
- fs2.close();
+ try (fs2 = provider.newFileSystem(Paths.get(args[2]), env)) {
+ z2zcopy(fs, fs2, args[3]);
+ }
break;
case attrs:
for (int i = 2; i < args.length; i++) {
path = fs.getPath(args[i]);
System.out.println(path);
System.out.println(
- Attributes.readBasicFileAttributes(path).toString());
+ Files.readAttributes(path, BasicFileAttributes.class).toString());
}
break;
case setmtime:
@@ -223,10 +223,10 @@
Date newDatetime = df.parse(args[2]);
for (int i = 3; i < args.length; i++) {
path = fs.getPath(args[i]);
- path.setAttribute("lastModifiedTime",
- FileTime.fromMillis(newDatetime.getTime()));
+ Files.setAttribute(path, "lastModifiedTime",
+ FileTime.fromMillis(newDatetime.getTime()));
System.out.println(
- Attributes.readBasicFileAttributes(path).toString());
+ Files.readAttributes(path, BasicFileAttributes.class).toString());
}
break;
case setctime:
@@ -234,10 +234,10 @@
newDatetime = df.parse(args[2]);
for (int i = 3; i < args.length; i++) {
path = fs.getPath(args[i]);
- path.setAttribute("creationTime",
- FileTime.fromMillis(newDatetime.getTime()));
+ Files.setAttribute(path, "creationTime",
+ FileTime.fromMillis(newDatetime.getTime()));
System.out.println(
- Attributes.readBasicFileAttributes(path).toString());
+ Files.readAttributes(path, BasicFileAttributes.class).toString());
}
break;
case setatime:
@@ -245,25 +245,22 @@
newDatetime = df.parse(args[2]);
for (int i = 3; i < args.length; i++) {
path = fs.getPath(args[i]);
- path.setAttribute("lastAccessTime",
- FileTime.fromMillis(newDatetime.getTime()));
+ Files.setAttribute(path, "lastAccessTime",
+ FileTime.fromMillis(newDatetime.getTime()));
System.out.println(
- Attributes.readBasicFileAttributes(path).toString());
+ Files.readAttributes(path, BasicFileAttributes.class).toString());
}
break;
case attrsspace:
path = fs.getPath("/");
- FileStore fstore = path.getFileStore();
- //System.out.println(fstore.getFileStoreAttributeView(FileStoreSpaceAttributeView.class)
- // .readAttributes());
- // or
+ FileStore fstore = Files.getFileStore(path);
System.out.printf("filestore[%s]%n", fstore.name());
System.out.printf(" totalSpace: %d%n",
- (Long)fstore.getAttribute("space:totalSpace"));
+ (Long)fstore.getAttribute("totalSpace"));
System.out.printf(" usableSpace: %d%n",
- (Long)fstore.getAttribute("space:usableSpace"));
+ (Long)fstore.getAttribute("usableSpace"));
System.out.printf(" unallocSpace: %d%n",
- (Long)fstore.getAttribute("space:unallocatedSpace"));
+ (Long)fstore.getAttribute("unallocatedSpace"));
break;
case list:
case tlist:
@@ -293,7 +290,7 @@
break;
case delete:
for (int i = 2; i < args.length; i++)
- fs.getPath(args[i]).delete();
+ Files.delete(fs.getPath(args[i]));
break;
case create:
case add:
@@ -305,17 +302,19 @@
case lsdir:
path = fs.getPath(args[2]);
final String fStr = (args.length > 3)?args[3]:"";
- DirectoryStream<Path> ds = path.newDirectoryStream(
+ try (DirectoryStream<Path> ds = Files.newDirectoryStream(path,
new DirectoryStream.Filter<Path>() {
public boolean accept(Path path) {
return path.toString().contains(fStr);
}
- });
- for (Path p : ds)
- System.out.println(p);
+ }))
+ {
+ for (Path p : ds)
+ System.out.println(p);
+ }
break;
case mkdir:
- fs.getPath(args[2]).createDirectory();
+ Files.createDirectory(fs.getPath(args[2]));
break;
case mkdirs:
mkdirs(fs.getPath(args[2]));
@@ -326,14 +325,14 @@
System.out.printf("%n%s%n", path);
System.out.println("-------(1)---------");
System.out.println(
- Attributes.readBasicFileAttributes(path).toString());
+ Files.readAttributes(path, BasicFileAttributes.class).toString());
System.out.println("-------(2)---------");
- Map<String, ?> map = path.readAttributes("zip:*");
- for (Map.Entry<String, ?> e : map.entrySet()) {
+ Map<String, Object> map = Files.readAttributes(path, "zip:*");
+ for (Map.Entry<String, Object> e : map.entrySet()) {
System.out.printf(" %s : %s%n", e.getKey(), e.getValue());
}
System.out.println("-------(3)---------");
- map = path.readAttributes("size,lastModifiedTime,isDirectory");
+ map = Files.readAttributes(path, "size,lastModifiedTime,isDirectory");
for (Map.Entry<String, ?> e : map.entrySet()) {
System.out.printf(" %s : %s%n", e.getKey(), e.getValue());
}
@@ -349,12 +348,17 @@
}
} catch (Exception x) {
x.printStackTrace();
- } finally {
- if (fs != null)
- fs.close();
}
}
+ private static FileSystemProvider getZipFSProvider() {
+ for (FileSystemProvider provider : FileSystemProvider.installedProviders()) {
+ if ("jar".equals(provider.getScheme()))
+ return provider;
+ }
+ return null;
+ }
+
private static byte[] getBytes(String name) {
return name.getBytes();
}
@@ -380,7 +384,7 @@
BasicFileAttributes attrs)
{
indent();
- System.out.printf("%s%n", file.getName().toString());
+ System.out.printf("%s%n", file.getFileName().toString());
return FileVisitResult.CONTINUE;
}
@@ -406,35 +410,35 @@
private static void update(FileSystem fs, String path) throws Throwable{
Path src = FileSystems.getDefault().getPath(path);
- if (Boolean.TRUE.equals(src.getAttribute("isDirectory"))) {
- DirectoryStream<Path> ds = src.newDirectoryStream();
- for (Path child : ds)
- update(fs, child.toString());
- ds.close();
+ if (Files.isDirectory(src)) {
+ try (DirectoryStream<Path> ds = Files.newDirectoryStream(src)) {
+ for (Path child : ds)
+ update(fs, child.toString());
+ }
} else {
Path dst = fs.getPath(path);
Path parent = dst.getParent();
- if (parent != null && parent.notExists())
+ if (parent != null && Files.notExists(parent))
mkdirs(parent);
- src.copyTo(dst, REPLACE_EXISTING);
+ Files.copy(src, dst, REPLACE_EXISTING);
}
}
private static void extract(FileSystem fs, String path) throws Throwable{
Path src = fs.getPath(path);
- if (Boolean.TRUE.equals(src.getAttribute("isDirectory"))) {
- DirectoryStream<Path> ds = src.newDirectoryStream();
- for (Path child : ds)
- extract(fs, child.toString());
- ds.close();
+ if (Files.isDirectory(src)) {
+ try (DirectoryStream<Path> ds = Files.newDirectoryStream(src)) {
+ for (Path child : ds)
+ extract(fs, child.toString());
+ }
} else {
if (path.startsWith("/"))
path = path.substring(1);
Path dst = FileSystems.getDefault().getPath(path);
Path parent = dst.getParent();
- if (parent.notExists())
+ if (Files.notExists(parent))
mkdirs(parent);
- src.copyTo(dst, REPLACE_EXISTING);
+ Files.copy(src, dst, REPLACE_EXISTING);
}
}
@@ -445,21 +449,21 @@
Path srcPath = src.getPath(path);
Path dstPath = dst.getPath(path);
- if (Boolean.TRUE.equals(srcPath.getAttribute("isDirectory"))) {
- if (!dstPath.exists()) {
+ if (Files.isDirectory(srcPath)) {
+ if (!Files.exists(dstPath)) {
try {
mkdirs(dstPath);
} catch (FileAlreadyExistsException x) {}
}
- DirectoryStream<Path> ds = srcPath.newDirectoryStream();
- for (Path child : ds) {
- z2zcopy(src, dst,
- path + (path.endsWith("/")?"":"/") + child.getName());
+ try (DirectoryStream<Path> ds = Files.newDirectoryStream(srcPath)) {
+ for (Path child : ds) {
+ z2zcopy(src, dst,
+ path + (path.endsWith("/")?"":"/") + child.getFileName());
+ }
}
- ds.close();
} else {
//System.out.println("copying..." + path);
- srcPath.copyTo(dstPath);
+ Files.copy(srcPath, dstPath);
}
}
@@ -480,9 +484,9 @@
dst = dstPath.resolve(dst);
try {
Path parent = dstPath.getParent();
- if (parent != null && parent.notExists())
+ if (parent != null && Files.notExists(parent))
mkdirs(parent);
- file.moveTo(dst);
+ Files.move(file, dst);
} catch (IOException x) {
x.printStackTrace();
}
@@ -497,7 +501,7 @@
dst = dstPath.resolve(dst);
try {
- if (dst.notExists())
+ if (Files.notExists(dst))
mkdirs(dst);
} catch (IOException x) {
x.printStackTrace();
@@ -511,7 +515,7 @@
throws IOException
{
try {
- dir.delete();
+ Files.delete(dir);
} catch (IOException x) {
//x.printStackTrace();
}
@@ -525,15 +529,15 @@
path = path.toAbsolutePath();
Path parent = path.getParent();
if (parent != null) {
- if (parent.notExists())
+ if (Files.notExists(parent))
mkdirs(parent);
}
- path.createDirectory();
+ Files.createDirectory(path);
}
private static void rmdirs(Path path) throws IOException {
while (path != null && path.getNameCount() != 0) {
- path.delete();
+ Files.delete(path);
path = path.getParent();
}
}
@@ -542,15 +546,15 @@
if (!"/".equals(path.toString())) {
System.out.printf(" %s%n", path.toString());
if (verbose)
- System.out.println(Attributes.readBasicFileAttributes(path).toString());
+ System.out.println(Files.readAttributes(path, BasicFileAttributes.class).toString());
}
- if (path.notExists())
+ if (Files.notExists(path))
return;
- if (Attributes.readBasicFileAttributes(path).isDirectory()) {
- DirectoryStream<Path> ds = path.newDirectoryStream();
- for (Path child : ds)
- list(child, verbose);
- ds.close();
+ if (Files.isDirectory(path)) {
+ try (DirectoryStream<Path> ds = Files.newDirectoryStream(path)) {
+ for (Path child : ds)
+ list(child, verbose);
+ }
}
}
@@ -561,12 +565,11 @@
// src.toString(), dst.toString());
//streams
- InputStream isSrc = src.newInputStream();
- InputStream isDst = dst.newInputStream();
byte[] bufSrc = new byte[8192];
byte[] bufDst = new byte[8192];
-
- try {
+ try (InputStream isSrc = Files.newInputStream(src);
+ InputStream isDst = Files.newInputStream(dst))
+ {
int nSrc = 0;
while ((nSrc = isSrc.read(bufSrc)) != -1) {
int nDst = 0;
@@ -588,24 +591,22 @@
nSrc--;
}
}
- } finally {
- isSrc.close();
- isDst.close();
}
// channels
- SeekableByteChannel chSrc = src.newByteChannel();
- SeekableByteChannel chDst = dst.newByteChannel();
- if (chSrc.size() != chDst.size()) {
- System.out.printf("src[%s].size=%d, dst[%s].size=%d%n",
- chSrc.toString(), chSrc.size(),
- chDst.toString(), chDst.size());
- throw new RuntimeException("CHECK FAILED!");
- }
- ByteBuffer bbSrc = ByteBuffer.allocate(8192);
- ByteBuffer bbDst = ByteBuffer.allocate(8192);
- try {
+ try (SeekableByteChannel chSrc = Files.newByteChannel(src);
+ SeekableByteChannel chDst = Files.newByteChannel(dst))
+ {
+ if (chSrc.size() != chDst.size()) {
+ System.out.printf("src[%s].size=%d, dst[%s].size=%d%n",
+ chSrc.toString(), chSrc.size(),
+ chDst.toString(), chDst.size());
+ throw new RuntimeException("CHECK FAILED!");
+ }
+ ByteBuffer bbSrc = ByteBuffer.allocate(8192);
+ ByteBuffer bbDst = ByteBuffer.allocate(8192);
+
int nSrc = 0;
while ((nSrc = chSrc.read(bbSrc)) != -1) {
int nDst = chDst.read(bbDst);
@@ -627,9 +628,6 @@
}
} catch (IOException x) {
x.printStackTrace();
- } finally {
- chSrc.close();
- chDst.close();
}
}
@@ -641,23 +639,15 @@
openwrite.add(CREATE_NEW);
openwrite.add(WRITE);
- FileChannel srcFc = src.getFileSystem()
- .provider()
- .newFileChannel(src, read);
- FileChannel dstFc = dst.getFileSystem()
- .provider()
- .newFileChannel(dst, openwrite);
-
- try {
+ try (FileChannel srcFc = src.getFileSystem().provider().newFileChannel(src, read);
+ FileChannel dstFc = dst.getFileSystem().provider().newFileChannel(dst, openwrite))
+ {
ByteBuffer bb = ByteBuffer.allocate(8192);
while (srcFc.read(bb) >= 0) {
bb.flip();
dstFc.write(bb);
bb.clear();
}
- } finally {
- srcFc.close();
- dstFc.close();
}
}
@@ -669,35 +659,28 @@
openwrite.add(CREATE_NEW);
openwrite.add(WRITE);
- SeekableByteChannel srcCh = src.newByteChannel(read);
- SeekableByteChannel dstCh = dst.newByteChannel(openwrite);
-
- try {
+ try (SeekableByteChannel srcCh = Files.newByteChannel(src, read);
+ SeekableByteChannel dstCh = Files.newByteChannel(dst, openwrite))
+ {
ByteBuffer bb = ByteBuffer.allocate(8192);
while (srcCh.read(bb) >= 0) {
bb.flip();
dstCh.write(bb);
bb.clear();
}
- } finally {
- srcCh.close();
- dstCh.close();
}
}
private static void streamCopy(Path src, Path dst) throws IOException
{
- InputStream isSrc = src.newInputStream();
- OutputStream osDst = dst.newOutputStream();
byte[] buf = new byte[8192];
- try {
+ try (InputStream isSrc = Files.newInputStream(src);
+ OutputStream osDst = Files.newOutputStream(dst))
+ {
int n = 0;
while ((n = isSrc.read(buf)) != -1) {
osDst.write(buf, 0, n);
}
- } finally {
- isSrc.close();
- osDst.close();
}
}
}
--- a/jdk/src/share/demo/nio/zipfs/README.txt Tue Feb 01 21:00:09 2011 +0530
+++ b/jdk/src/share/demo/nio/zipfs/README.txt Tue Feb 01 14:20:01 2011 -0800
@@ -5,9 +5,8 @@
used to create a FileSystem, eg:
// use file type detection
- Map<String,?> env = Collections.emptyMap();
Path jarfile = Paths.get("foo.jar");
- FileSystem fs = FileSystems.newFileSystem(jarfile, env, null);
+ FileSystem fs = FileSystems.newFileSystem(jarfile, null);
-or
--- a/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileAttributeView.java Tue Feb 01 21:00:09 2011 +0530
+++ b/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileAttributeView.java Tue Feb 01 14:20:01 2011 -0800
@@ -32,11 +32,10 @@
package com.sun.nio.zipfs;
-import java.nio.file.attribute.BasicFileAttributeView;
-import java.nio.file.attribute.FileAttributeView;
-import java.nio.file.attribute.FileTime;
+import java.nio.file.attribute.*;
import java.io.IOException;
import java.util.LinkedHashMap;
+import java.util.Map;
/*
* @author Xueming Shen, Rajendra Gutupalli, Jaya Hangal
@@ -122,25 +121,19 @@
"' is unknown or read-only attribute");
}
- public Object getAttribute(String attribute, boolean domap)
+ Map<String, Object> readAttributes(String attributes)
throws IOException
{
ZipFileAttributes zfas = readAttributes();
- if (!domap) {
- try {
- return attribute(AttrID.valueOf(attribute), zfas);
- } catch (IllegalArgumentException x) {}
- return null;
- }
LinkedHashMap<String, Object> map = new LinkedHashMap<>();
- if ("*".equals(attribute)) {
+ if ("*".equals(attributes)) {
for (AttrID id : AttrID.values()) {
try {
map.put(id.name(), attribute(id, zfas));
} catch (IllegalArgumentException x) {}
}
} else {
- String[] as = attribute.split(",");
+ String[] as = attributes.split(",");
for (String a : as) {
try {
map.put(a, attribute(AttrID.valueOf(a), zfas));
--- a/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileStore.java Tue Feb 01 21:00:09 2011 +0530
+++ b/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileStore.java Tue Feb 01 14:20:01 2011 -0800
@@ -32,14 +32,13 @@
package com.sun.nio.zipfs;
import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.FileStore;
import java.nio.file.FileSystems;
import java.nio.file.Path;
+import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileAttributeView;
import java.nio.file.attribute.FileStoreAttributeView;
-import java.nio.file.attribute.FileStoreSpaceAttributeView;
-import java.nio.file.attribute.FileStoreSpaceAttributes;
-import java.nio.file.attribute.Attributes;
import java.nio.file.attribute.BasicFileAttributeView;
import java.util.Formatter;
@@ -87,71 +86,61 @@
public <V extends FileStoreAttributeView> V getFileStoreAttributeView(Class<V> type) {
if (type == null)
throw new NullPointerException();
- if (type == FileStoreSpaceAttributeView.class)
- return (V) new ZipFileStoreAttributeView(this);
- return null;
+ return (V)null;
+ }
+
+ @Override
+ public long getTotalSpace() throws IOException {
+ return new ZipFileStoreAttributes(this).totalSpace();
+ }
+
+ @Override
+ public long getUsableSpace() throws IOException {
+ return new ZipFileStoreAttributes(this).usableSpace();
+ }
+
+ @Override
+ public long getUnallocatedSpace() throws IOException {
+ return new ZipFileStoreAttributes(this).unallocatedSpace();
}
@Override
public Object getAttribute(String attribute) throws IOException {
- if (attribute.equals("space:totalSpace"))
- return new ZipFileStoreAttributeView(this).readAttributes().totalSpace();
- if (attribute.equals("space:usableSpace"))
- return new ZipFileStoreAttributeView(this).readAttributes().usableSpace();
- if (attribute.equals("space:unallocatedSpace"))
- return new ZipFileStoreAttributeView(this).readAttributes().unallocatedSpace();
+ if (attribute.equals("totalSpace"))
+ return getTotalSpace();
+ if (attribute.equals("usableSpace"))
+ return getUsableSpace();
+ if (attribute.equals("unallocatedSpace"))
+ return getUnallocatedSpace();
throw new UnsupportedOperationException("does not support the given attribute");
}
- private static class ZipFileStoreAttributeView implements FileStoreSpaceAttributeView {
-
- private final ZipFileStore fileStore;
+ private static class ZipFileStoreAttributes {
+ final FileStore fstore;
+ final long size;
- public ZipFileStoreAttributeView(ZipFileStore fileStore) {
- this.fileStore = fileStore;
- }
-
- @Override
- public String name() {
- return "space";
+ public ZipFileStoreAttributes(ZipFileStore fileStore)
+ throws IOException
+ {
+ Path path = FileSystems.getDefault().getPath(fileStore.name());
+ this.size = Files.size(path);
+ this.fstore = Files.getFileStore(path);
}
- @Override
- public FileStoreSpaceAttributes readAttributes() throws IOException {
- final String file = fileStore.name();
- Path path = FileSystems.getDefault().getPath(file);
- final long size = Attributes.readBasicFileAttributes(path).size();
- final FileStore fstore = path.getFileStore();
- final FileStoreSpaceAttributes fstoreAttrs =
- Attributes.readFileStoreSpaceAttributes(fstore);
- return new FileStoreSpaceAttributes() {
- public long totalSpace() {
- return size;
- }
+ public long totalSpace() {
+ return size;
+ }
- public long usableSpace() {
- if (!fstore.isReadOnly())
- return fstoreAttrs.usableSpace();
- return 0;
- }
-
- public long unallocatedSpace() {
- if (!fstore.isReadOnly())
- return fstoreAttrs.unallocatedSpace();
- return 0;
- }
+ public long usableSpace() throws IOException {
+ if (!fstore.isReadOnly())
+ return fstore.getUsableSpace();
+ return 0;
+ }
- public String toString() {
- StringBuilder sb = new StringBuilder();
- Formatter fm = new Formatter(sb);
- fm.format("FileStoreSpaceAttributes[%s]%n", file);
- fm.format(" totalSpace: %d%n", totalSpace());
- fm.format(" usableSpace: %d%n", usableSpace());
- fm.format(" unallocSpace: %d%n", unallocatedSpace());
- fm.close();
- return sb.toString();
- }
- };
+ public long unallocatedSpace() throws IOException {
+ if (!fstore.isReadOnly())
+ return fstore.getUnallocatedSpace();
+ return 0;
}
}
}
--- a/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileSystem.java Tue Feb 01 21:00:09 2011 +0530
+++ b/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileSystem.java Tue Feb 01 14:20:01 2011 -0800
@@ -101,24 +101,25 @@
this.provider = provider;
this.zfpath = zfpath;
- if (zfpath.notExists()) {
+ if (Files.notExists(zfpath)) {
if (createNew) {
- OutputStream os = zfpath.newOutputStream(CREATE_NEW, WRITE);
- new END().write(os, 0);
- os.close();
+ try (OutputStream os = Files.newOutputStream(zfpath, CREATE_NEW, WRITE)) {
+ new END().write(os, 0);
+ }
} else {
throw new FileSystemNotFoundException(zfpath.toString());
}
}
- zfpath.checkAccess(AccessMode.READ); // sm and existence check
+ // sm and existence check
+ zfpath.getFileSystem().provider().checkAccess(zfpath, AccessMode.READ);
try {
- zfpath.checkAccess(AccessMode.WRITE);
+ zfpath.getFileSystem().provider().checkAccess(zfpath, AccessMode.WRITE);
} catch (AccessDeniedException x) {
this.readOnly = true;
}
this.zc = ZipCoder.get(nameEncoding);
this.defaultdir = new ZipPath(this, getBytes(defaultDir));
- this.ch = zfpath.newByteChannel(READ);
+ this.ch = Files.newByteChannel(zfpath, READ);
this.cen = initCEN();
}
@@ -159,9 +160,22 @@
}
@Override
- public ZipPath getPath(String path) {
- if (path.length() == 0)
- throw new InvalidPathException(path, "path should not be empty");
+ public ZipPath getPath(String first, String... more) {
+ String path;
+ if (more.length == 0) {
+ path = first;
+ } else {
+ StringBuilder sb = new StringBuilder();
+ sb.append(first);
+ for (String segment: more) {
+ if (segment.length() > 0) {
+ if (sb.length() > 0)
+ sb.append('/');
+ sb.append(segment);
+ }
+ }
+ path = sb.toString();
+ }
return new ZipPath(this, getBytes(path));
}
@@ -268,16 +282,22 @@
def.end();
}
+ IOException ioe = null;
synchronized (tmppaths) {
for (Path p: tmppaths) {
try {
- p.deleteIfExists();
+ Files.deleteIfExists(p);
} catch (IOException x) {
- x.printStackTrace();
+ if (ioe == null)
+ ioe = x;
+ else
+ ioe.addSuppressed(x);
}
}
}
- provider.removeFileSystem(zfpath);
+ provider.removeFileSystem(zfpath, this);
+ if (ioe != null)
+ throw ioe;
}
ZipFileAttributes getFileAttributes(byte[] path)
@@ -444,7 +464,7 @@
u.bytes = Arrays.copyOf(eSrc.bytes, eSrc.bytes.length);
else if (eSrc.file != null) {
u.file = getTempPathForEntry(null);
- eSrc.file.copyTo(u.file, REPLACE_EXISTING);
+ Files.copy(eSrc.file, u.file, REPLACE_EXISTING);
}
}
}
@@ -778,7 +798,8 @@
fch.close();
if (forWrite) {
u.mtime = System.currentTimeMillis();
- u.size = Attributes.readBasicFileAttributes(u.file).size();
+ u.size = Files.size(u.file);
+
update(u);
} else {
if (!isFCH) // if this is a new fch for reading
@@ -805,13 +826,8 @@
if (path != null) {
Entry e = getEntry0(path);
if (e != null) {
- InputStream is = newInputStream(path);
- OutputStream os = tmpPath.newOutputStream(WRITE);
- try {
- copyStream(is, os);
- } finally {
- is.close();
- os.close();
+ try (InputStream is = newInputStream(path)) {
+ Files.copy(is, tmpPath, REPLACE_EXISTING);
}
}
}
@@ -819,7 +835,7 @@
}
private void removeTempPathForEntry(Path path) throws IOException {
- path.delete();
+ Files.delete(path);
tmppaths.remove(path);
}
@@ -1073,11 +1089,11 @@
// shared key. consumer guarantees the "writeLock" before use it.
private final IndexNode LOOKUPKEY = IndexNode.keyOf(null);
- private void updateDelete(Entry e) {
+ private void updateDelete(IndexNode inode) {
beginWrite();
try {
- removeFromTree(e);
- inodes.remove(e);
+ removeFromTree(inode);
+ inodes.remove(inode);
hasUpdate = true;
} finally {
endWrite();
@@ -1158,7 +1174,7 @@
for (ExChannelCloser ecc : exChClosers) {
if (ecc.streams.isEmpty()) {
ecc.ch.close();
- ecc.path.delete();
+ Files.delete(ecc.path);
exChClosers.remove(ecc);
}
}
@@ -1166,7 +1182,7 @@
if (!hasUpdate)
return;
Path tmpFile = createTempFileInSameDirectoryAs(zfpath);
- OutputStream os = tmpFile.newOutputStream(WRITE);
+ OutputStream os = Files.newOutputStream(tmpFile, WRITE);
ArrayList<Entry> elist = new ArrayList<>(inodes.size());
long written = 0;
byte[] buf = new byte[8192];
@@ -1191,26 +1207,26 @@
os.write(e.bytes); // already
written += e.bytes.length;
} else if (e.file != null) { // tmp file
- InputStream is = e.file.newInputStream();
- int n;
- if (e.type == Entry.NEW) { // deflated already
- while ((n = is.read(buf)) != -1) {
- os.write(buf, 0, n);
- written += n;
+ try (InputStream is = Files.newInputStream(e.file)) {
+ int n;
+ if (e.type == Entry.NEW) { // deflated already
+ while ((n = is.read(buf)) != -1) {
+ os.write(buf, 0, n);
+ written += n;
+ }
+ } else if (e.type == Entry.FILECH) {
+ // the data are not deflated, use ZEOS
+ try (OutputStream os2 = new EntryOutputStream(e, os)) {
+ while ((n = is.read(buf)) != -1) {
+ os2.write(buf, 0, n);
+ }
+ }
+ written += e.csize;
+ if ((e.flag & FLAG_DATADESCR) != 0)
+ written += e.writeEXT(os);
}
- } else if (e.type == Entry.FILECH) {
- // the data are not deflated, use ZEOS
- OutputStream os2 = new EntryOutputStream(e, os);
- while ((n = is.read(buf)) != -1) {
- os2.write(buf, 0, n);
- }
- os2.close();
- written += e.csize;
- if ((e.flag & FLAG_DATADESCR) != 0)
- written += e.writeEXT(os);
}
- is.close();
- e.file.delete();
+ Files.delete(e.file);
tmppaths.remove(e.file);
} else {
// dir, 0-length data
@@ -1257,15 +1273,15 @@
createTempFileInSameDirectoryAs(zfpath),
ch,
streams);
- zfpath.moveTo(ecc.path, REPLACE_EXISTING);
+ Files.move(zfpath, ecc.path, REPLACE_EXISTING);
exChClosers.add(ecc);
streams = Collections.synchronizedSet(new HashSet<InputStream>());
} else {
ch.close();
- zfpath.delete();
+ Files.delete(zfpath);
}
- tmpFile.moveTo(zfpath, REPLACE_EXISTING);
+ Files.move(tmpFile, zfpath, REPLACE_EXISTING);
hasUpdate = false; // clear
/*
if (isOpen) {
@@ -1304,16 +1320,17 @@
throws IOException
{
checkWritable();
- Entry e = getEntry0(path);
- if (e == null) {
+
+ IndexNode inode = getInode(path);
+ if (inode == null) {
if (path != null && path.length == 0)
throw new ZipException("root directory </> can't not be delete");
if (failIfNotExists)
throw new NoSuchFileException(getString(path));
} else {
- if (e.isDir() && e.child != null)
+ if (inode.isDir() && inode.child != null)
throw new DirectoryNotEmptyException(getString(path));
- updateDelete(e);
+ updateDelete(inode);
}
}
@@ -1343,7 +1360,7 @@
OutputStream os;
if (useTempFile) {
e.file = getTempPathForEntry(null);
- os = e.file.newOutputStream(WRITE);
+ os = Files.newOutputStream(e.file, WRITE);
} else {
os = new ByteArrayOutputStream((e.size > 0)? (int)e.size : 8192);
}
@@ -1359,12 +1376,12 @@
if (e.bytes != null)
eis = new ByteArrayInputStream(e.bytes);
else if (e.file != null)
- eis = e.file.newInputStream();
+ eis = Files.newInputStream(e.file);
else
throw new ZipException("update entry data is missing");
} else if (e.type == Entry.FILECH) {
// FILECH result is un-compressed.
- eis = e.file.newInputStream();
+ eis = Files.newInputStream(e.file);
// TBD: wrap to hook close()
// streams.add(eis);
return eis;
--- a/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileSystemProvider.java Tue Feb 01 21:00:09 2011 +0530
+++ b/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileSystemProvider.java Tue Feb 01 14:20:01 2011 -0800
@@ -31,23 +31,18 @@
package com.sun.nio.zipfs;
-import java.io.IOException;
-import java.nio.channels.FileChannel;
-import java.nio.file.FileRef;
-import java.nio.file.FileSystem;
-import java.nio.file.FileSystemNotFoundException;
-import java.nio.file.FileSystemAlreadyExistsException;
-import java.nio.file.OpenOption;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.ProviderMismatchException;
-import java.nio.file.attribute.FileAttribute;
+import java.io.*;
+import java.nio.channels.*;
+import java.nio.file.*;
+import java.nio.file.DirectoryStream.Filter;
+import java.nio.file.attribute.*;
import java.nio.file.spi.FileSystemProvider;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ExecutorService;
/*
*
@@ -87,28 +82,25 @@
public FileSystem newFileSystem(URI uri, Map<String, ?> env)
throws IOException
{
- return newFileSystem(uriToPath(uri), env);
+ return newFileSystem(uriToPath(uri), env, true);
}
@Override
- public FileSystem newFileSystem(FileRef file, Map<String, ?> env)
+ public FileSystem newFileSystem(Path path, Map<String, ?> env)
throws IOException
{
- if (!(file instanceof Path))
- throw new UnsupportedOperationException();
- Path path = (Path)file;
if (!path.toUri().getScheme().equalsIgnoreCase("file")) {
throw new UnsupportedOperationException();
}
- return newFileSystem(path, env);
+ return newFileSystem(path, env, false);
}
- private FileSystem newFileSystem(Path path, Map<String, ?> env)
+ private FileSystem newFileSystem(Path path, Map<String, ?> env, boolean checkIfFSExists)
throws IOException
{
synchronized(filesystems) {
Path realPath = null;
- if (path.exists()) {
+ if (checkIfFSExists && Files.exists(path)) {
realPath = path.toRealPath(true);
if (filesystems.containsKey(realPath))
throw new FileSystemAlreadyExistsException();
@@ -116,7 +108,8 @@
ZipFileSystem zipfs = new ZipFileSystem(this, path, env);
if (realPath == null)
realPath = path.toRealPath(true);
- filesystems.put(realPath, zipfs);
+ if (!filesystems.containsKey(realPath))
+ filesystems.put(realPath, zipfs);
return zipfs;
}
}
@@ -133,18 +126,6 @@
return getFileSystem(uri).getPath(spec.substring(sep + 1));
}
- @Override
- public FileChannel newFileChannel(Path path,
- Set<? extends OpenOption> options,
- FileAttribute<?>... attrs)
- throws IOException
- {
- if (path == null)
- throw new NullPointerException("path is null");
- if (path instanceof ZipPath)
- return ((ZipPath)path).newFileChannel(options, attrs);
- throw new ProviderMismatchException();
- }
@Override
public FileSystem getFileSystem(URI uri) {
@@ -161,9 +142,155 @@
}
}
- void removeFileSystem(Path zfpath) throws IOException {
+ // Checks that the given file is a UnixPath
+ static final ZipPath toZipPath(Path path) {
+ if (path == null)
+ throw new NullPointerException();
+ if (!(path instanceof ZipPath))
+ throw new ProviderMismatchException();
+ return (ZipPath)path;
+ }
+
+ @Override
+ public void checkAccess(Path path, AccessMode... modes) throws IOException {
+ toZipPath(path).checkAccess(modes);
+ }
+
+ @Override
+ public void copy(Path src, Path target, CopyOption... options)
+ throws IOException
+ {
+ toZipPath(src).copy(toZipPath(target), options);
+ }
+
+ @Override
+ public void createDirectory(Path path, FileAttribute<?>... attrs)
+ throws IOException
+ {
+ toZipPath(path).createDirectory(attrs);
+ }
+
+ @Override
+ public final void delete(Path path) throws IOException {
+ toZipPath(path).delete();
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public <V extends FileAttributeView> V
+ getFileAttributeView(Path path, Class<V> type, LinkOption... options)
+ {
+ return (V)ZipFileAttributeView.get(toZipPath(path), type);
+ }
+
+ @Override
+ public FileStore getFileStore(Path path) throws IOException {
+ return toZipPath(path).getFileStore();
+ }
+
+ @Override
+ public boolean isHidden(Path path) {
+ return toZipPath(path).isHidden();
+ }
+
+ @Override
+ public boolean isSameFile(Path path, Path other) throws IOException {
+ return toZipPath(path).isSameFile(other);
+ }
+
+ @Override
+ public void move(Path src, Path target, CopyOption... options)
+ throws IOException
+ {
+ toZipPath(src).move(toZipPath(target), options);
+ }
+
+ @Override
+ public AsynchronousFileChannel newAsynchronousFileChannel(Path path,
+ Set<? extends OpenOption> options,
+ ExecutorService exec,
+ FileAttribute<?>... attrs)
+ throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public SeekableByteChannel newByteChannel(Path path,
+ Set<? extends OpenOption> options,
+ FileAttribute<?>... attrs)
+ throws IOException
+ {
+ return toZipPath(path).newByteChannel(options, attrs);
+ }
+
+ @Override
+ public DirectoryStream<Path> newDirectoryStream(
+ Path path, Filter<? super Path> filter) throws IOException
+ {
+ return toZipPath(path).newDirectoryStream(filter);
+ }
+
+ @Override
+ public FileChannel newFileChannel(Path path,
+ Set<? extends OpenOption> options,
+ FileAttribute<?>... attrs)
+ throws IOException
+ {
+ return toZipPath(path).newFileChannel(options, attrs);
+ }
+
+ @Override
+ public InputStream newInputStream(Path path, OpenOption... options)
+ throws IOException
+ {
+ return toZipPath(path).newInputStream(options);
+ }
+
+ @Override
+ public OutputStream newOutputStream(Path path, OpenOption... options)
+ throws IOException
+ {
+ return toZipPath(path).newOutputStream(options);
+ }
+
+ @Override
+ public <A extends BasicFileAttributes> A
+ readAttributes(Path path, Class<A> type, LinkOption... options)
+ throws IOException
+ {
+ if (type == BasicFileAttributes.class || type == ZipFileAttributes.class)
+ return (A)toZipPath(path).getAttributes();
+ return null;
+ }
+
+ @Override
+ public Map<String, Object>
+ readAttributes(Path path, String attribute, LinkOption... options)
+ throws IOException
+ {
+ return toZipPath(path).readAttributes(attribute, options);
+ }
+
+ @Override
+ public Path readSymbolicLink(Path link) throws IOException {
+ throw new UnsupportedOperationException("Not supported.");
+ }
+
+ @Override
+ public void setAttribute(Path path, String attribute,
+ Object value, LinkOption... options)
+ throws IOException
+ {
+ toZipPath(path).setAttribute(attribute, value, options);
+ }
+
+ //////////////////////////////////////////////////////////////
+ void removeFileSystem(Path zfpath, ZipFileSystem zfs) throws IOException {
synchronized (filesystems) {
- filesystems.remove(zfpath.toRealPath(true));
+ zfpath = zfpath.toRealPath(true);
+ if (filesystems.get(zfpath) == zfs)
+ filesystems.remove(zfpath);
}
}
}
--- a/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipPath.java Tue Feb 01 21:00:09 2011 +0530
+++ b/jdk/src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipPath.java Tue Feb 01 14:20:01 2011 -0800
@@ -31,29 +31,23 @@
package com.sun.nio.zipfs;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
import java.net.URI;
-import java.nio.channels.FileChannel;
-import java.nio.channels.SeekableByteChannel;
+import java.nio.channels.*;
import java.nio.file.*;
import java.nio.file.DirectoryStream.Filter;
-import java.nio.file.attribute.BasicFileAttributeView;
-import java.nio.file.attribute.FileAttribute;
-import java.nio.file.attribute.FileAttributeView;
-import java.nio.file.attribute.FileTime;
+import java.nio.file.attribute.*;
import java.util.*;
import static java.nio.file.StandardOpenOption.*;
import static java.nio.file.StandardCopyOption.*;
+
/**
*
* @author Xueming Shen, Rajendra Gutupalli,Jaya Hangal
*/
-public class ZipPath extends Path {
+public class ZipPath implements Path {
private final ZipFileSystem zfs;
private final byte[] path;
@@ -82,7 +76,7 @@
}
@Override
- public Path getName() {
+ public Path getFileName() {
initOffsets();
int count = offsets.length;
if (count == 0)
@@ -162,8 +156,7 @@
return realPath;
}
- @Override
- public boolean isHidden() {
+ boolean isHidden() {
return false;
}
@@ -230,7 +223,7 @@
public Path relativize(Path other) {
final ZipPath o = checkPath(other);
if (o.equals(this))
- return null;
+ return new ZipPath(getFileSystem(), new byte[0], true);
if (/* this.getFileSystem() != o.getFileSystem() || */
this.isAbsolute() != o.isAbsolute()) {
throw new IllegalArgumentException();
@@ -277,8 +270,6 @@
@Override
public ZipPath resolve(Path other) {
- if (other == null)
- return this;
final ZipPath o = checkPath(other);
if (o.isAbsolute())
return o;
@@ -297,8 +288,11 @@
}
@Override
- public ZipPath resolve(String other) {
- return resolve(getFileSystem().getPath(other));
+ public Path resolveSibling(Path other) {
+ if (other == null)
+ throw new NullPointerException();
+ Path parent = getParent();
+ return (parent == null) ? other : parent.resolve(other);
}
@Override
@@ -333,12 +327,30 @@
}
@Override
+ public ZipPath resolve(String other) {
+ return resolve(getFileSystem().getPath(other));
+ }
+
+ @Override
+ public final Path resolveSibling(String other) {
+ return resolveSibling(getFileSystem().getPath(other));
+ }
+
+ @Override
+ public final boolean startsWith(String other) {
+ return startsWith(getFileSystem().getPath(other));
+ }
+
+ @Override
+ public final boolean endsWith(String other) {
+ return endsWith(getFileSystem().getPath(other));
+ }
+
+ @Override
public Path normalize() {
byte[] resolved = getResolved();
if (resolved == path) // no change
return this;
- if (resolved.length == 0)
- return null;
return new ZipPath(zfs, resolved, true);
}
@@ -548,198 +560,6 @@
return len1 - len2;
}
- @Override
- public Path createSymbolicLink(
- Path target, FileAttribute<?>... attrs) throws IOException {
- throw new UnsupportedOperationException("Not supported.");
- }
-
- @Override
- public Path createLink(
- Path existing) throws IOException {
- throw new UnsupportedOperationException("Not supported.");
- }
-
- @Override
- public Path readSymbolicLink() throws IOException {
- throw new UnsupportedOperationException("Not supported.");
- }
-
- @Override
- public Path createDirectory(FileAttribute<?>... attrs)
- throws IOException
- {
- zfs.createDirectory(getResolvedPath(), attrs);
- return this;
- }
-
- public final Path createFile(FileAttribute<?>... attrs)
- throws IOException
- {
- OutputStream os = newOutputStream(CREATE_NEW, WRITE);
- try {
- os.close();
- } catch (IOException x) {}
- return this;
- }
-
- @Override
- public InputStream newInputStream(OpenOption... options)
- throws IOException {
- if (options.length > 0) {
- for (OpenOption opt : options) {
- if (opt != READ)
- throw new UnsupportedOperationException("'" + opt + "' not allowed");
- }
- }
- return zfs.newInputStream(getResolvedPath());
- }
-
- private static final DirectoryStream.Filter<Path> acceptAllFilter =
- new DirectoryStream.Filter<>() {
- @Override public boolean accept(Path entry) { return true; }
- };
-
- @Override
- public final DirectoryStream<Path> newDirectoryStream() throws IOException {
- return newDirectoryStream(acceptAllFilter);
- }
-
- @Override
- public DirectoryStream<Path> newDirectoryStream(Filter<? super Path> filter)
- throws IOException
- {
- return new ZipDirectoryStream(this, filter);
- }
-
- @Override
- public final DirectoryStream<Path> newDirectoryStream(String glob)
- throws IOException
- {
- // avoid creating a matcher if all entries are required.
- if (glob.equals("*"))
- return newDirectoryStream();
-
- // create a matcher and return a filter that uses it.
- final PathMatcher matcher = getFileSystem().getPathMatcher("glob:" + glob);
- DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<>() {
- @Override
- public boolean accept(Path entry) {
- return matcher.matches(entry.getName());
- }
- };
- return newDirectoryStream(filter);
- }
-
- @Override
- public final void delete() throws IOException {
- zfs.deleteFile(getResolvedPath(), true);
- }
-
- @Override
- public final void deleteIfExists() throws IOException {
- zfs.deleteFile(getResolvedPath(), false);
- }
-
- ZipFileAttributes getAttributes() throws IOException
- {
- ZipFileAttributes zfas = zfs.getFileAttributes(getResolvedPath());
- if (zfas == null)
- throw new NoSuchFileException(toString());
- return zfas;
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public <V extends FileAttributeView> V getFileAttributeView(Class<V> type,
- LinkOption... options)
- {
- return (V)ZipFileAttributeView.get(this, type);
- }
-
- @Override
- public void setAttribute(String attribute,
- Object value,
- LinkOption... options)
- throws IOException
- {
- String type = null;
- String attr = null;
- int colonPos = attribute.indexOf(':');
- if (colonPos == -1) {
- type = "basic";
- attr = attribute;
- } else {
- type = attribute.substring(0, colonPos++);
- attr = attribute.substring(colonPos);
- }
- ZipFileAttributeView view = ZipFileAttributeView.get(this, type);
- if (view == null)
- throw new UnsupportedOperationException("view <" + view + "> is not supported");
- view.setAttribute(attr, value);
- }
-
- void setTimes(FileTime mtime, FileTime atime, FileTime ctime)
- throws IOException
- {
- zfs.setTimes(getResolvedPath(), mtime, atime, ctime);
- }
-
- private Object getAttributesImpl(String attribute, boolean domap)
- throws IOException
- {
- String view = null;
- String attr = null;
- int colonPos = attribute.indexOf(':');
- if (colonPos == -1) {
- view = "basic";
- attr = attribute;
- } else {
- view = attribute.substring(0, colonPos++);
- attr = attribute.substring(colonPos);
- }
- ZipFileAttributeView zfv = ZipFileAttributeView.get(this, view);
- if (zfv == null) {
- throw new UnsupportedOperationException("view not supported");
- }
- return zfv.getAttribute(attr, domap);
- }
-
- @Override
- public Object getAttribute(String attribute, LinkOption... options)
- throws IOException
- {
- return getAttributesImpl(attribute, false);
- }
-
- @Override
- public Map<String,?> readAttributes(String attribute, LinkOption... options)
- throws IOException
- {
- return (Map<String, ?>)getAttributesImpl(attribute, true);
- }
-
- @Override
- public FileStore getFileStore() throws IOException {
- // each ZipFileSystem only has one root (as requested for now)
- if (exists())
- return zfs.getFileStore(this);
- throw new NoSuchFileException(zfs.getString(path));
- }
-
- @Override
- public boolean isSameFile(Path other) throws IOException {
- if (this.equals(other))
- return true;
- if (other == null ||
- this.getFileSystem() != other.getFileSystem())
- return false;
- this.checkAccess();
- other.checkAccess();
- return Arrays.equals(this.getResolvedPath(),
- ((ZipPath)other).getResolvedPath());
- }
-
public WatchKey register(
WatchService watcher,
WatchEvent.Kind<?>[] events,
@@ -756,6 +576,11 @@
}
@Override
+ public final File toFile() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
public Iterator<Path> iterator() {
return new Iterator<>() {
private int i = 0;
@@ -783,9 +608,115 @@
};
}
- @Override
- public SeekableByteChannel newByteChannel(Set<? extends OpenOption> options,
- FileAttribute<?>... attrs)
+ /////////////////////////////////////////////////////////////////////
+
+
+ void createDirectory(FileAttribute<?>... attrs)
+ throws IOException
+ {
+ zfs.createDirectory(getResolvedPath(), attrs);
+ }
+
+ InputStream newInputStream(OpenOption... options) throws IOException
+ {
+ if (options.length > 0) {
+ for (OpenOption opt : options) {
+ if (opt != READ)
+ throw new UnsupportedOperationException("'" + opt + "' not allowed");
+ }
+ }
+ return zfs.newInputStream(getResolvedPath());
+ }
+
+ DirectoryStream<Path> newDirectoryStream(Filter<? super Path> filter)
+ throws IOException
+ {
+ return new ZipDirectoryStream(this, filter);
+ }
+
+ void delete() throws IOException {
+ zfs.deleteFile(getResolvedPath(), true);
+ }
+
+ void deleteIfExists() throws IOException {
+ zfs.deleteFile(getResolvedPath(), false);
+ }
+
+ ZipFileAttributes getAttributes() throws IOException
+ {
+ ZipFileAttributes zfas = zfs.getFileAttributes(getResolvedPath());
+ if (zfas == null)
+ throw new NoSuchFileException(toString());
+ return zfas;
+ }
+
+ void setAttribute(String attribute, Object value, LinkOption... options)
+ throws IOException
+ {
+ String type = null;
+ String attr = null;
+ int colonPos = attribute.indexOf(':');
+ if (colonPos == -1) {
+ type = "basic";
+ attr = attribute;
+ } else {
+ type = attribute.substring(0, colonPos++);
+ attr = attribute.substring(colonPos);
+ }
+ ZipFileAttributeView view = ZipFileAttributeView.get(this, type);
+ if (view == null)
+ throw new UnsupportedOperationException("view <" + view + "> is not supported");
+ view.setAttribute(attr, value);
+ }
+
+ void setTimes(FileTime mtime, FileTime atime, FileTime ctime)
+ throws IOException
+ {
+ zfs.setTimes(getResolvedPath(), mtime, atime, ctime);
+ }
+
+ Map<String, Object> readAttributes(String attributes, LinkOption... options)
+ throws IOException
+
+ {
+ String view = null;
+ String attrs = null;
+ int colonPos = attributes.indexOf(':');
+ if (colonPos == -1) {
+ view = "basic";
+ attrs = attributes;
+ } else {
+ view = attributes.substring(0, colonPos++);
+ attrs = attributes.substring(colonPos);
+ }
+ ZipFileAttributeView zfv = ZipFileAttributeView.get(this, view);
+ if (zfv == null) {
+ throw new UnsupportedOperationException("view not supported");
+ }
+ return zfv.readAttributes(attrs);
+ }
+
+ FileStore getFileStore() throws IOException {
+ // each ZipFileSystem only has one root (as requested for now)
+ if (exists())
+ return zfs.getFileStore(this);
+ throw new NoSuchFileException(zfs.getString(path));
+ }
+
+ boolean isSameFile(Path other) throws IOException {
+ if (this.equals(other))
+ return true;
+ if (other == null ||
+ this.getFileSystem() != other.getFileSystem())
+ return false;
+ this.checkAccess();
+ ((ZipPath)other).checkAccess();
+ return Arrays.equals(this.getResolvedPath(),
+ ((ZipPath)other).getResolvedPath());
+ }
+
+ SeekableByteChannel newByteChannel(Set<? extends OpenOption> options,
+ FileAttribute<?>... attrs)
throws IOException
{
return zfs.newByteChannel(getResolvedPath(), options, attrs);
@@ -799,16 +730,7 @@
return zfs.newFileChannel(getResolvedPath(), options, attrs);
}
- @Override
- public SeekableByteChannel newByteChannel(OpenOption... options)
- throws IOException {
- Set<OpenOption> set = new HashSet<>(options.length);
- Collections.addAll(set, options);
- return newByteChannel(set);
- }
-
- @Override
- public void checkAccess(AccessMode... modes) throws IOException {
+ void checkAccess(AccessMode... modes) throws IOException {
boolean w = false;
boolean x = false;
for (AccessMode mode : modes) {
@@ -834,11 +756,9 @@
}
if (x)
throw new AccessDeniedException(toString());
-
}
- @Override
- public boolean exists() {
+ boolean exists() {
if (path.length == 1 && path[0] == '/')
return true;
try {
@@ -847,15 +767,7 @@
return false;
}
- @Override
- public boolean notExists() {
- return !exists();
- }
-
-
- @Override
- public OutputStream newOutputStream(OpenOption... options)
- throws IOException
+ OutputStream newOutputStream(OpenOption... options) throws IOException
{
if (options.length == 0)
return zfs.newOutputStream(getResolvedPath(),
@@ -863,42 +775,32 @@
return zfs.newOutputStream(getResolvedPath(), options);
}
- @Override
- public Path moveTo(Path target, CopyOption... options)
+ void move(ZipPath target, CopyOption... options)
throws IOException
{
- if (this.zfs.provider() == target.getFileSystem().provider() &&
- this.zfs.getZipFile().isSameFile(((ZipPath)target).zfs.getZipFile()))
+ if (Files.isSameFile(this.zfs.getZipFile(), target.zfs.getZipFile()))
{
zfs.copyFile(true,
- getResolvedPath(),
- ((ZipPath)target).getResolvedPath(),
+ getResolvedPath(), target.getResolvedPath(),
options);
} else {
copyToTarget(target, options);
delete();
}
- return target;
}
- @Override
- public Path copyTo(Path target, CopyOption... options)
+ void copy(ZipPath target, CopyOption... options)
throws IOException
{
- if (this.zfs.provider() == target.getFileSystem().provider() &&
- this.zfs.getZipFile().isSameFile(((ZipPath)target).zfs.getZipFile()))
- {
+ if (Files.isSameFile(this.zfs.getZipFile(), target.zfs.getZipFile()))
zfs.copyFile(false,
- getResolvedPath(),
- ((ZipPath)target).getResolvedPath(),
+ getResolvedPath(), target.getResolvedPath(),
options);
- } else {
+ else
copyToTarget(target, options);
- }
- return target;
}
- private void copyToTarget(Path target, CopyOption... options)
+ private void copyToTarget(ZipPath target, CopyOption... options)
throws IOException
{
boolean replaceExisting = false;
@@ -948,7 +850,7 @@
}
if (copyAttrs) {
BasicFileAttributeView view =
- target.getFileAttributeView(BasicFileAttributeView.class);
+ ZipFileAttributeView.get(target, BasicFileAttributeView.class);
try {
view.setTimes(zfas.lastModifiedTime(),
zfas.lastAccessTime(),
--- a/jdk/src/share/demo/zipfs Tue Feb 01 21:00:09 2011 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,703 +0,0 @@
-/*
- * Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * - Neither the name of Oracle nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.io.*;
-import java.nio.*;
-import java.nio.channels.*;
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.net.*;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.*;
-
-import static java.nio.file.StandardOpenOption.*;
-import static java.nio.file.StandardCopyOption.*;
-
-/*
- * ZipFileSystem usage demo
- *
- * java Demo action ZipfileName [...]
- *
- * @author Xueming Shen
- */
-
-public class Demo {
-
- static enum Action {
- rename, // <java Demo rename zipfile src dst>
- // rename entry src to dst inside zipfile
-
- movein, // <java Demo movein zipfile src dst>
- // move an external src file into zipfile
- // as entry dst
-
- moveout, // <java Demo moveout zipfile src dst>
- // move a zipfile entry src out to dst
-
- copy, // <java Demo copy zipfile src dst>
- // copy entry src to dst inside zipfile
-
- copyin, // <java Demo copyin zipfile src dst>
- // copy an external src file into zipfile
- // as entry dst
-
- copyin_attrs, // <java Demo copyin_attrs zipfile src dst>
- // copy an external src file into zipfile
- // as entry dst, with attributes (timestamp)
-
- copyout, // <java Demo copyout zipfile src dst>
- // copy zipfile entry src" out to file dst
-
- copyout_attrs, // <java Demo copyout_attrs zipfile src dst>
-
- zzmove, // <java Demo zzmove zfsrc zfdst path>
- // move entry path/dir from zfsrc to zfdst
-
- zzcopy, // <java Demo zzcopy zfsrc zfdst path>
- // copy path from zipfile zfsrc to zipfile
- // zfdst
-
- attrs, // <java Demo attrs zipfile path>
- // printout the attributes of entry path
-
- attrsspace, // <java Demo attrsspace zipfile path>
- // printout the storespace attrs of entry path
-
- setmtime, // <java Demo setmtime zipfile "MM/dd/yy-HH:mm:ss" path...>
- // set the lastModifiedTime of entry path
-
- setatime, // <java Demo setatime zipfile "MM/dd/yy-HH:mm:ss" path...>
- setctime, // <java Demo setctime zipfile "MM/dd/yy-HH:mm:ss" path...>
-
- lsdir, // <java Demo lsdir zipfile dir>
- // list dir's direct child files/dirs
-
- mkdir, // <java Demo mkdir zipfile dir>
-
- mkdirs, // <java Demo mkdirs zipfile dir>
-
- rmdirs, // <java Demo rmdirs zipfile dir>
-
- list, // <java Demo list zipfile [dir]>
- // recursively list all entries of dir
- // via DirectoryStream
-
- tlist, // <java Demo tlist zipfile [dir]>
- // list with buildDirTree=true
-
- vlist, // <java Demo vlist zipfile [dir]>
- // recursively verbose list all entries of
- // dir via DirectoryStream
-
- walk, // <java Demo walk zipfile [dir]>
- // recursively walk all entries of dir
- // via Files.walkFileTree
-
- twalk, // <java Demo twalk zipfile [dir]>
- // walk with buildDirTree=true
-
- extract, // <java Demo extract zipfile file [...]>
-
- update, // <java Demo extract zipfile file [...]>
-
- delete, // <java Demo delete zipfile file [...]>
-
- add, // <java Demo add zipfile file [...]>
-
- create, // <java Demo create zipfile file [...]>
- // create a new zipfile if it doesn't exit
- // and then add the file(s) into it.
-
- attrs2, // <java Demo attrs2 zipfile file [...]>
- // test different ways to print attrs
-
- prof,
- }
-
- public static void main(String[] args) throws Throwable {
-
- Action action = Action.valueOf(args[0]);
- Map<String, Object> env = env = new HashMap<>();
- if (action == Action.create)
- env.put("create", "true");
- if (action == Action.tlist || action == Action.twalk)
- env.put("buildDirTree", true);
- FileSystem fs = FileSystems.newFileSystem(Paths.get(args[1]), env, null);
-
- try {
- FileSystem fs2;
- Path path, src, dst;
- boolean isRename = false;
- switch (action) {
- case rename:
- src = fs.getPath(args[2]);
- dst = fs.getPath(args[3]);
- src.moveTo(dst);
- break;
- case moveout:
- src = fs.getPath(args[2]);
- dst = Paths.get(args[3]);
- src.moveTo(dst);
- break;
- case movein:
- src = Paths.get(args[2]);
- dst = fs.getPath(args[3]);
- src.moveTo(dst);
- break;
- case copy:
- src = fs.getPath(args[2]);
- dst = fs.getPath(args[3]);
- src.copyTo(dst);
- break;
- case copyout:
- src = fs.getPath(args[2]);
- dst = Paths.get(args[3]);
- src.copyTo(dst);
- break;
- case copyin:
- src = Paths.get(args[2]);
- dst = fs.getPath(args[3]);
- src.copyTo(dst);
- break;
- case copyin_attrs:
- src = Paths.get(args[2]);
- dst = fs.getPath(args[3]);
- src.copyTo(dst, COPY_ATTRIBUTES);
- break;
- case copyout_attrs:
- src = fs.getPath(args[2]);
- dst = Paths.get(args[3]);
- src.copyTo(dst, COPY_ATTRIBUTES);
- break;
- case zzmove:
- fs2 = FileSystems.newFileSystem(Paths.get(args[2]), env, null);
- //sf1.getPath(args[3]).moveTo(fs2.getPath(args[3]));
- z2zmove(fs, fs2, args[3]);
- fs2.close();
- break;
- case zzcopy:
- fs2 = FileSystems.newFileSystem(Paths.get(args[2]), env, null);
- //sf1.getPath(args[3]).copyTo(fs2.getPath(args[3]));
- z2zcopy(fs, fs2, args[3]);
- fs2.close();
- break;
- case attrs:
- for (int i = 2; i < args.length; i++) {
- path = fs.getPath(args[i]);
- System.out.println(path);
- System.out.println(
- Attributes.readBasicFileAttributes(path).toString());
- }
- break;
- case setmtime:
- DateFormat df = new SimpleDateFormat("MM/dd/yyyy-HH:mm:ss");
- Date newDatetime = df.parse(args[2]);
- for (int i = 3; i < args.length; i++) {
- path = fs.getPath(args[i]);
- path.setAttribute("lastModifiedTime",
- FileTime.fromMillis(newDatetime.getTime()));
- System.out.println(
- Attributes.readBasicFileAttributes(path).toString());
- }
- break;
- case setctime:
- df = new SimpleDateFormat("MM/dd/yyyy-HH:mm:ss");
- newDatetime = df.parse(args[2]);
- for (int i = 3; i < args.length; i++) {
- path = fs.getPath(args[i]);
- path.setAttribute("creationTime",
- FileTime.fromMillis(newDatetime.getTime()));
- System.out.println(
- Attributes.readBasicFileAttributes(path).toString());
- }
- break;
- case setatime:
- df = new SimpleDateFormat("MM/dd/yyyy-HH:mm:ss");
- newDatetime = df.parse(args[2]);
- for (int i = 3; i < args.length; i++) {
- path = fs.getPath(args[i]);
- path.setAttribute("lastAccessTime",
- FileTime.fromMillis(newDatetime.getTime()));
- System.out.println(
- Attributes.readBasicFileAttributes(path).toString());
- }
- break;
- case attrsspace:
- path = fs.getPath("/");
- FileStore fstore = path.getFileStore();
- //System.out.println(fstore.getFileStoreAttributeView(FileStoreSpaceAttributeView.class)
- // .readAttributes());
- // or
- System.out.printf("filestore[%s]%n", fstore.name());
- System.out.printf(" totalSpace: %d%n",
- (Long)fstore.getAttribute("space:totalSpace"));
- System.out.printf(" usableSpace: %d%n",
- (Long)fstore.getAttribute("space:usableSpace"));
- System.out.printf(" unallocSpace: %d%n",
- (Long)fstore.getAttribute("space:unallocatedSpace"));
- break;
- case list:
- case tlist:
- if (args.length < 3)
- list(fs.getPath("/"), false);
- else
- list(fs.getPath(args[2]), false);
- break;
- case vlist:
- if (args.length < 3)
- list(fs.getPath("/"), true);
- else
- list(fs.getPath(args[2]), true);
- break;
- case twalk:
- case walk:
- walk(fs.getPath((args.length > 2)? args[2] : "/"));
- break;
- case extract:
- if (args.length == 2) {
- extract(fs, "/");
- } else {
- for (int i = 2; i < args.length; i++) {
- extract(fs, args[i]);
- }
- }
- break;
- case delete:
- for (int i = 2; i < args.length; i++)
- fs.getPath(args[i]).delete();
- break;
- case create:
- case add:
- case update:
- for (int i = 2; i < args.length; i++) {
- update(fs, args[i]);
- }
- break;
- case lsdir:
- path = fs.getPath(args[2]);
- final String fStr = (args.length > 3)?args[3]:"";
- DirectoryStream<Path> ds = path.newDirectoryStream(
- new DirectoryStream.Filter<Path>() {
- public boolean accept(Path path) {
- return path.toString().contains(fStr);
- }
- });
- for (Path p : ds)
- System.out.println(p);
- break;
- case mkdir:
- fs.getPath(args[2]).createDirectory();
- break;
- case mkdirs:
- mkdirs(fs.getPath(args[2]));
- break;
- case attrs2:
- for (int i = 2; i < args.length; i++) {
- path = fs.getPath(args[i]);
- System.out.printf("%n%s%n", path);
- System.out.println("-------(1)---------");
- System.out.println(
- Attributes.readBasicFileAttributes(path).toString());
- System.out.println("-------(2)---------");
- Map<String, ?> map = path.readAttributes("zip:*");
- for (Map.Entry<String, ?> e : map.entrySet()) {
- System.out.printf(" %s : %s%n", e.getKey(), e.getValue());
- }
- System.out.println("-------(3)---------");
- map = path.readAttributes("size,lastModifiedTime,isDirectory");
- for (Map.Entry<String, ?> e : map.entrySet()) {
- System.out.printf(" %s : %s%n", e.getKey(), e.getValue());
- }
- }
- break;
- case prof:
- list(fs.getPath("/"), false);
- while (true) {
- Thread.sleep(10000);
- //list(fs.getPath("/"), true);
- System.out.println("sleeping...");
- }
- }
- } catch (Exception x) {
- x.printStackTrace();
- } finally {
- if (fs != null)
- fs.close();
- }
- }
-
- private static byte[] getBytes(String name) {
- return name.getBytes();
- }
-
- private static String getString(byte[] name) {
- return new String(name);
- }
-
- private static void walk(Path path) throws IOException
- {
- Files.walkFileTree(
- path,
- new SimpleFileVisitor<Path>() {
- private int indent = 0;
- private void indent() {
- int n = 0;
- while (n++ < indent)
- System.out.printf(" ");
- }
-
- @Override
- public FileVisitResult visitFile(Path file,
- BasicFileAttributes attrs)
- {
- indent();
- System.out.printf("%s%n", file.getName().toString());
- return FileVisitResult.CONTINUE;
- }
-
- @Override
- public FileVisitResult preVisitDirectory(Path dir,
- BasicFileAttributes attrs)
- {
- indent();
- System.out.printf("[%s]%n", dir.toString());
- indent += 2;
- return FileVisitResult.CONTINUE;
- }
-
- @Override
- public FileVisitResult postVisitDirectory(Path dir,
- IOException ioe)
- {
- indent -= 2;
- return FileVisitResult.CONTINUE;
- }
- });
- }
-
- private static void update(FileSystem fs, String path) throws Throwable{
- Path src = FileSystems.getDefault().getPath(path);
- if (Boolean.TRUE.equals(src.getAttribute("isDirectory"))) {
- DirectoryStream<Path> ds = src.newDirectoryStream();
- for (Path child : ds)
- update(fs, child.toString());
- ds.close();
- } else {
- Path dst = fs.getPath(path);
- Path parent = dst.getParent();
- if (parent != null && parent.notExists())
- mkdirs(parent);
- src.copyTo(dst, REPLACE_EXISTING);
- }
- }
-
- private static void extract(FileSystem fs, String path) throws Throwable{
- Path src = fs.getPath(path);
- if (Boolean.TRUE.equals(src.getAttribute("isDirectory"))) {
- DirectoryStream<Path> ds = src.newDirectoryStream();
- for (Path child : ds)
- extract(fs, child.toString());
- ds.close();
- } else {
- if (path.startsWith("/"))
- path = path.substring(1);
- Path dst = FileSystems.getDefault().getPath(path);
- Path parent = dst.getParent();
- if (parent.notExists())
- mkdirs(parent);
- src.copyTo(dst, REPLACE_EXISTING);
- }
- }
-
- // use DirectoryStream
- private static void z2zcopy(FileSystem src, FileSystem dst, String path)
- throws IOException
- {
- Path srcPath = src.getPath(path);
- Path dstPath = dst.getPath(path);
-
- if (Boolean.TRUE.equals(srcPath.getAttribute("isDirectory"))) {
- if (!dstPath.exists()) {
- try {
- mkdirs(dstPath);
- } catch (FileAlreadyExistsException x) {}
- }
- DirectoryStream<Path> ds = srcPath.newDirectoryStream();
- for (Path child : ds) {
- z2zcopy(src, dst,
- path + (path.endsWith("/")?"":"/") + child.getName());
- }
- ds.close();
- } else {
- //System.out.println("copying..." + path);
- srcPath.copyTo(dstPath);
- }
- }
-
- // use TreeWalk to move
- private static void z2zmove(FileSystem src, FileSystem dst, String path)
- throws IOException
- {
- final Path srcPath = src.getPath(path).toAbsolutePath();
- final Path dstPath = dst.getPath(path).toAbsolutePath();
-
- Files.walkFileTree(srcPath, new SimpleFileVisitor<Path>() {
-
- @Override
- public FileVisitResult visitFile(Path file,
- BasicFileAttributes attrs)
- {
- Path dst = srcPath.relativize(file);
- dst = dstPath.resolve(dst);
- try {
- Path parent = dstPath.getParent();
- if (parent != null && parent.notExists())
- mkdirs(parent);
- file.moveTo(dst);
- } catch (IOException x) {
- x.printStackTrace();
- }
- return FileVisitResult.CONTINUE;
- }
-
- @Override
- public FileVisitResult preVisitDirectory(Path dir,
- BasicFileAttributes attrs)
- {
- Path dst = srcPath.relativize(dir);
- dst = dstPath.resolve(dst);
- try {
-
- if (dst.notExists())
- mkdirs(dst);
- } catch (IOException x) {
- x.printStackTrace();
- }
- return FileVisitResult.CONTINUE;
- }
-
- @Override
- public FileVisitResult postVisitDirectory(Path dir,
- IOException ioe)
- throws IOException
- {
- try {
- dir.delete();
- } catch (IOException x) {
- //x.printStackTrace();
- }
- return FileVisitResult.CONTINUE;
- }
- });
-
- }
-
- private static void mkdirs(Path path) throws IOException {
- path = path.toAbsolutePath();
- Path parent = path.getParent();
- if (parent != null) {
- if (parent.notExists())
- mkdirs(parent);
- }
- path.createDirectory();
- }
-
- private static void rmdirs(Path path) throws IOException {
- while (path != null && path.getNameCount() != 0) {
- path.delete();
- path = path.getParent();
- }
- }
-
- private static void list(Path path, boolean verbose ) throws IOException {
- if (!"/".equals(path.toString())) {
- System.out.printf(" %s%n", path.toString());
- if (verbose)
- System.out.println(Attributes.readBasicFileAttributes(path).toString());
- }
- if (path.notExists())
- return;
- if (Attributes.readBasicFileAttributes(path).isDirectory()) {
- DirectoryStream<Path> ds = path.newDirectoryStream();
- for (Path child : ds)
- list(child, verbose);
- ds.close();
- }
- }
-
- // check the content of two paths are equal
- private static void checkEqual(Path src, Path dst) throws IOException
- {
- //System.out.printf("checking <%s> vs <%s>...%n",
- // src.toString(), dst.toString());
-
- //streams
- InputStream isSrc = src.newInputStream();
- InputStream isDst = dst.newInputStream();
- byte[] bufSrc = new byte[8192];
- byte[] bufDst = new byte[8192];
-
- try {
- int nSrc = 0;
- while ((nSrc = isSrc.read(bufSrc)) != -1) {
- int nDst = 0;
- while (nDst < nSrc) {
- int n = isDst.read(bufDst, nDst, nSrc - nDst);
- if (n == -1) {
- System.out.printf("checking <%s> vs <%s>...%n",
- src.toString(), dst.toString());
- throw new RuntimeException("CHECK FAILED!");
- }
- nDst += n;
- }
- while (--nSrc >= 0) {
- if (bufSrc[nSrc] != bufDst[nSrc]) {
- System.out.printf("checking <%s> vs <%s>...%n",
- src.toString(), dst.toString());
- throw new RuntimeException("CHECK FAILED!");
- }
- nSrc--;
- }
- }
- } finally {
- isSrc.close();
- isDst.close();
- }
-
- // channels
- SeekableByteChannel chSrc = src.newByteChannel();
- SeekableByteChannel chDst = dst.newByteChannel();
- if (chSrc.size() != chDst.size()) {
- System.out.printf("src[%s].size=%d, dst[%s].size=%d%n",
- chSrc.toString(), chSrc.size(),
- chDst.toString(), chDst.size());
- throw new RuntimeException("CHECK FAILED!");
- }
- ByteBuffer bbSrc = ByteBuffer.allocate(8192);
- ByteBuffer bbDst = ByteBuffer.allocate(8192);
-
- try {
- int nSrc = 0;
- while ((nSrc = chSrc.read(bbSrc)) != -1) {
- int nDst = chDst.read(bbDst);
- if (nSrc != nDst) {
- System.out.printf("checking <%s> vs <%s>...%n",
- src.toString(), dst.toString());
- throw new RuntimeException("CHECK FAILED!");
- }
- while (--nSrc >= 0) {
- if (bbSrc.get(nSrc) != bbDst.get(nSrc)) {
- System.out.printf("checking <%s> vs <%s>...%n",
- src.toString(), dst.toString());
- throw new RuntimeException("CHECK FAILED!");
- }
- nSrc--;
- }
- bbSrc.flip();
- bbDst.flip();
- }
- } catch (IOException x) {
- x.printStackTrace();
- } finally {
- chSrc.close();
- chDst.close();
- }
- }
-
- private static void fchCopy(Path src, Path dst) throws IOException
- {
- Set<OpenOption> read = new HashSet<>();
- read.add(READ);
- Set<OpenOption> openwrite = new HashSet<>();
- openwrite.add(CREATE_NEW);
- openwrite.add(WRITE);
-
- FileChannel srcFc = src.getFileSystem()
- .provider()
- .newFileChannel(src, read);
- FileChannel dstFc = dst.getFileSystem()
- .provider()
- .newFileChannel(dst, openwrite);
-
- try {
- ByteBuffer bb = ByteBuffer.allocate(8192);
- while (srcFc.read(bb) >= 0) {
- bb.flip();
- dstFc.write(bb);
- bb.clear();
- }
- } finally {
- srcFc.close();
- dstFc.close();
- }
- }
-
- private static void chCopy(Path src, Path dst) throws IOException
- {
- Set<OpenOption> read = new HashSet<>();
- read.add(READ);
- Set<OpenOption> openwrite = new HashSet<>();
- openwrite.add(CREATE_NEW);
- openwrite.add(WRITE);
-
- SeekableByteChannel srcCh = src.newByteChannel(read);
- SeekableByteChannel dstCh = dst.newByteChannel(openwrite);
-
- try {
- ByteBuffer bb = ByteBuffer.allocate(8192);
- while (srcCh.read(bb) >= 0) {
- bb.flip();
- dstCh.write(bb);
- bb.clear();
- }
- } finally {
- srcCh.close();
- dstCh.close();
- }
- }
-
- private static void streamCopy(Path src, Path dst) throws IOException
- {
- InputStream isSrc = src.newInputStream();
- OutputStream osDst = dst.newOutputStream();
- byte[] buf = new byte[8192];
- try {
- int n = 0;
- while ((n = isSrc.read(buf)) != -1) {
- osDst.write(buf, 0, n);
- }
- } finally {
- isSrc.close();
- osDst.close();
- }
- }
-}
--- a/jdk/test/demo/zipfs/Basic.java Tue Feb 01 21:00:09 2011 +0530
+++ b/jdk/test/demo/zipfs/Basic.java Tue Feb 01 14:20:01 2011 -0800
@@ -48,9 +48,9 @@
if (!found)
throw new RuntimeException("'jar' provider not installed");
- // Test: FileSystems#newFileSystem(FileRef)
+ // Test: FileSystems#newFileSystem(Path)
Map<String,?> env = new HashMap<String,Object>();
- FileSystems.newFileSystem(zipfile, env, null).close();
+ FileSystems.newFileSystem(zipfile, null).close();
// Test: FileSystems#newFileSystem(URI)
URI uri = new URI("jar", zipfile.toUri().toString(), null);
@@ -69,14 +69,11 @@
// Test: DirectoryStream
found = false;
- DirectoryStream<Path> stream = fs.getPath("/").newDirectoryStream();
- try {
+ try (DirectoryStream<Path> stream = Files.newDirectoryStream(fs.getPath("/"))) {
for (Path entry: stream) {
found = entry.toString().equals("/META-INF/");
if (found) break;
}
- } finally {
- stream.close();
}
if (!found)
@@ -84,21 +81,21 @@
// Test: copy file from zip file to current (scratch) directory
Path source = fs.getPath("/META-INF/services/java.nio.file.spi.FileSystemProvider");
- if (source.exists()) {
- Path target = Paths.get(source.getName().toString());
- source.copyTo(target, StandardCopyOption.REPLACE_EXISTING);
+ if (Files.exists(source)) {
+ Path target = Paths.get(source.getFileName().toString());
+ Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
try {
- long s1 = Attributes.readBasicFileAttributes(source).size();
- long s2 = Attributes.readBasicFileAttributes(target).size();
+ long s1 = Files.readAttributes(source, BasicFileAttributes.class).size();
+ long s2 = Files.readAttributes(target, BasicFileAttributes.class).size();
if (s2 != s1)
throw new RuntimeException("target size != source size");
} finally {
- target.delete();
+ Files.delete(target);
}
}
// Test: FileStore
- FileStore store = fs.getPath("/").getFileStore();
+ FileStore store = Files.getFileStore(fs.getPath("/"));
if (!store.supportsFileAttributeView("basic"))
throw new RuntimeException("BasicFileAttributeView should be supported");
@@ -107,7 +104,7 @@
if (fs.isOpen())
throw new RuntimeException("FileSystem should be closed");
try {
- fs.getPath("/missing").checkAccess(AccessMode.READ);
+ fs.provider().checkAccess(fs.getPath("/missing"), AccessMode.READ);
} catch (ClosedFileSystemException x) { }
}
@@ -125,9 +122,9 @@
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs)
{
- if (dir.getName() != null) {
+ if (dir.getFileName() != null) {
indent();
- System.out.println(dir.getName() + "/");
+ System.out.println(dir.getFileName() + "/");
indent++;
}
return FileVisitResult.CONTINUE;
@@ -138,7 +135,7 @@
BasicFileAttributes attrs)
{
indent();
- System.out.print(file.getName());
+ System.out.print(file.getFileName());
if (attrs.isRegularFile())
System.out.format(" (%d)", attrs.size());
System.out.println();
@@ -151,7 +148,7 @@
{
if (exc != null)
super.postVisitDirectory(dir, exc);
- if (dir.getName() != null)
+ if (dir.getFileName() != null)
indent--;
return FileVisitResult.CONTINUE;
}
--- a/jdk/test/demo/zipfs/PathOps.java Tue Feb 01 21:00:09 2011 +0530
+++ b/jdk/test/demo/zipfs/PathOps.java Tue Feb 01 14:20:01 2011 -0800
@@ -100,7 +100,7 @@
PathOps name(String expected) {
out.println("check name");
checkPath();
- check(path.getName(), expected);
+ check(path.getFileName(), expected);
return this;
}
@@ -197,7 +197,7 @@
try {
out.println("check two paths are same");
checkPath();
- check(path.isSameFile(test(target).path()), true);
+ check(Files.isSameFile(path, test(target).path()), true);
} catch (IOException ioe) {
fail();
}
@@ -320,7 +320,7 @@
// relativize
test("/a/b/c")
- .relativize("/a/b/c", null)
+ .relativize("/a/b/c", "")
.relativize("/a/b/c/d/e", "d/e")
.relativize("/a/x", "../../x");
@@ -332,7 +332,7 @@
test("/foo")
.normalize("/foo");
test(".")
- .normalize(null);
+ .normalize("");
test("..")
.normalize("..");
test("/..")
@@ -344,7 +344,7 @@
test("./foo")
.normalize("foo");
test("foo/..")
- .normalize(null);
+ .normalize("");
test("../foo")
.normalize("../foo");
test("../../foo")
@@ -411,13 +411,13 @@
}
try {
- path.startsWith(null);
+ path.startsWith((Path)null);
throw new RuntimeException("NullPointerException not thrown");
} catch (NullPointerException npe) {
}
try {
- path.endsWith(null);
+ path.endsWith((Path)null);
throw new RuntimeException("NullPointerException not thrown");
} catch (NullPointerException npe) {
}
@@ -427,8 +427,7 @@
public static void main(String[] args) throws Throwable {
Path zipfile = Paths.get(args[0]);
- Map<String,?> env = new HashMap<String,Object>();
- fs = FileSystems.newFileSystem(zipfile, env, null);
+ fs = FileSystems.newFileSystem(zipfile, null);
npes();
doPathOpTests();
fs.close();
--- a/jdk/test/demo/zipfs/ZipFSTester.java Tue Feb 01 21:00:09 2011 +0530
+++ b/jdk/test/demo/zipfs/ZipFSTester.java Tue Feb 01 14:20:01 2011 -0800
@@ -25,6 +25,7 @@
import java.nio.*;
import java.nio.channels.*;
import java.nio.file.*;
+import java.nio.file.spi.*;
import java.nio.file.attribute.*;
import java.net.*;
import java.util.*;
@@ -40,15 +41,13 @@
public class ZipFSTester {
public static void main(String[] args) throws Throwable {
- FileSystem fs = null;
- try {
- fs = newZipFileSystem(Paths.get(args[0]), new HashMap<String, Object>());
+
+ try (FileSystem fs = newZipFileSystem(Paths.get(args[0]),
+ new HashMap<String, Object>()))
+ {
test0(fs);
test1(fs);
test2(fs); // more tests
- } finally {
- if (fs != null)
- fs.close();
}
}
@@ -63,10 +62,10 @@
}
for (String pname : list) {
Path path = fs.getPath(pname);
- if (!path.exists())
+ if (!Files.exists(path))
throw new RuntimeException("path existence check failed!");
while ((path = path.getParent()) != null) {
- if (!path.exists())
+ if (!Files.exists(path))
throw new RuntimeException("parent existence check failed!");
}
}
@@ -85,12 +84,22 @@
z2zcopy(fs, fs0, "/", 0);
fs0.close(); // sync to file
- fs = newZipFileSystem(tmpfsPath, new HashMap<String, Object>());
- try {
+ try (fs = newZipFileSystem(tmpfsPath, new HashMap<String, Object>())) {
+
+ FileSystemProvider provider = fs.provider();
+ // newFileSystem(path...) should not throw exception
+ try (FileSystem fsPath = provider.newFileSystem(tmpfsPath, new HashMap<String, Object>())){}
+ try (FileSystem fsUri = provider.newFileSystem(
+ new URI("jar", tmpfsPath.toUri().toString(), null),
+ new HashMap<String, Object>()))
+ {
+ throw new RuntimeException("newFileSystem(uri...) does not throw exception");
+ } catch (FileSystemAlreadyExistsException fsaee) {}
+
// prepare a src
Path src = getTempPath();
String tmpName = src.toString();
- OutputStream os = src.newOutputStream();
+ OutputStream os = Files.newOutputStream(src);
byte[] bits = new byte[12345];
rdm.nextBytes(bits);
os.write(bits);
@@ -98,37 +107,37 @@
// copyin
Path dst = getPathWithParents(fs, tmpName);
- src.copyTo(dst);
+ Files.copy(src, dst);
checkEqual(src, dst);
// copy
Path dst2 = getPathWithParents(fs, "/xyz" + rdm.nextInt(100) +
"/efg" + rdm.nextInt(100) + "/foo.class");
- dst.copyTo(dst2);
+ Files.copy(dst, dst2);
//dst.moveTo(dst2);
checkEqual(src, dst2);
// delete
- dst.delete();
- if (dst.exists())
+ Files.delete(dst);
+ if (Files.exists(dst))
throw new RuntimeException("Failed!");
// moveout
Path dst3 = Paths.get(tmpName + "_Tmp");
- dst2.moveTo(dst3);
+ Files.move(dst2, dst3);
checkEqual(src, dst3);
// delete
- if (dst2.exists())
+ if (Files.exists(dst2))
throw new RuntimeException("Failed!");
- dst3.delete();
- if (dst3.exists())
+ Files.delete(dst3);
+ if (Files.exists(dst3))
throw new RuntimeException("Failed!");
// newInputStream on dir
Path parent = dst2.getParent();
try {
- parent.newInputStream();
+ Files.newInputStream(parent);
throw new RuntimeException("Failed");
} catch (FileSystemException e) {
e.printStackTrace(); // expected fse
@@ -147,17 +156,15 @@
Path tmp = Paths.get(tmpName + "_Tmp");
fchCopy(dst, tmp); // out
checkEqual(src, tmp);
- tmp.delete();
+ Files.delete(tmp);
// test channels
channel(fs, dst);
- dst.delete();
- src.delete();
+ Files.delete(dst);
+ Files.delete(src);
} finally {
- if (fs != null)
- fs.close();
- if (tmpfsPath.exists())
- tmpfsPath.delete();
+ if (Files.exists(tmpfsPath))
+ Files.delete(tmpfsPath);
}
}
@@ -242,7 +249,7 @@
while (itr.hasNext()) {
String path = itr.next();
try {
- if (fs2.getPath(path).exists()) {
+ if (Files.exists(fs2.getPath(path))) {
z2zmove(fs2, fs3, path);
itr.remove();
}
@@ -296,15 +303,16 @@
fs4.close();
System.out.printf("failed=%d%n", failed);
- fs1Path.delete();
- fs2Path.delete();
- fs3Path.delete();
+ Files.delete(fs1Path);
+ Files.delete(fs2Path);
+ Files.delete(fs3Path);
}
private static FileSystem newZipFileSystem(Path path, Map<String, ?> env)
- throws IOException
+ throws Exception
{
- return FileSystems.newFileSystem(path, env, null);
+ return FileSystems.newFileSystem(
+ new URI("jar", path.toUri().toString(), null), env, null);
}
private static Path getTempPath() throws IOException
@@ -317,11 +325,11 @@
private static void list(Path path, List<String> files, List<String> dirs )
throws IOException
{
- if (Attributes.readBasicFileAttributes(path).isDirectory()) {
- DirectoryStream<Path> ds = path.newDirectoryStream();
- for (Path child : ds)
- list(child, files, dirs);
- ds.close();
+ if (Files.isDirectory(path)) {
+ try (DirectoryStream<Path> ds = Files.newDirectoryStream(path)) {
+ for (Path child : ds)
+ list(child, files, dirs);
+ }
dirs.add(path.toString());
} else {
files.add(path.toString());
@@ -335,26 +343,26 @@
Path srcPath = src.getPath(path);
Path dstPath = dst.getPath(path);
- if (Boolean.TRUE.equals(srcPath.getAttribute("isDirectory"))) {
- if (!dstPath.exists()) {
+ if (Files.isDirectory(srcPath)) {
+ if (!Files.exists(dstPath)) {
try {
mkdirs(dstPath);
} catch (FileAlreadyExistsException x) {}
}
- DirectoryStream<Path> ds = srcPath.newDirectoryStream();
- for (Path child : ds) {
- z2zcopy(src, dst,
- path + (path.endsWith("/")?"":"/") + child.getName(),
- method);
+ try (DirectoryStream<Path> ds = Files.newDirectoryStream(srcPath)) {
+ for (Path child : ds) {
+ z2zcopy(src, dst,
+ path + (path.endsWith("/")?"":"/") + child.getFileName(),
+ method);
+ }
}
- ds.close();
} else {
try {
- if (dstPath.exists())
+ if (Files.exists(dstPath))
return;
switch (method) {
case 0:
- srcPath.copyTo(dstPath);
+ Files.copy(srcPath, dstPath);
break;
case 1:
chCopy(srcPath, dstPath);
@@ -374,21 +382,21 @@
Path srcPath = src.getPath(path);
Path dstPath = dst.getPath(path);
- if (Boolean.TRUE.equals(srcPath.getAttribute("isDirectory"))) {
- if (!dstPath.exists())
+ if (Files.isDirectory(srcPath)) {
+ if (!Files.exists(dstPath))
mkdirs(dstPath);
- DirectoryStream<Path> ds = srcPath.newDirectoryStream();
- for (Path child : ds) {
- z2zmove(src, dst,
- path + (path.endsWith("/")?"":"/") + child.getName());
+ try (DirectoryStream<Path> ds = Files.newDirectoryStream(srcPath)) {
+ for (Path child : ds) {
+ z2zmove(src, dst,
+ path + (path.endsWith("/")?"":"/") + child.getFileName());
+ }
}
- ds.close();
} else {
//System.out.println("moving..." + path);
Path parent = dstPath.getParent();
- if (parent != null && parent.notExists())
+ if (parent != null && Files.notExists(parent))
mkdirs(parent);
- srcPath.moveTo(dstPath);
+ Files.move(srcPath, dstPath);
}
}
@@ -409,7 +417,7 @@
BasicFileAttributes attrs)
{
indent();
- System.out.printf("%s%n", file.getName().toString());
+ System.out.printf("%s%n", file.getFileName().toString());
return FileVisitResult.CONTINUE;
}
@@ -435,20 +443,20 @@
}
private static void mkdirs(Path path) throws IOException {
- if (path.exists())
+ if (Files.exists(path))
return;
path = path.toAbsolutePath();
Path parent = path.getParent();
if (parent != null) {
- if (parent.notExists())
+ if (Files.notExists(parent))
mkdirs(parent);
}
- path.createDirectory();
+ Files.createDirectory(path);
}
private static void rmdirs(Path path) throws IOException {
while (path != null && path.getNameCount() != 0) {
- path.delete();
+ Files.delete(path);
path = path.getParent();
}
}
@@ -460,12 +468,11 @@
// src.toString(), dst.toString());
//streams
- InputStream isSrc = src.newInputStream();
- InputStream isDst = dst.newInputStream();
byte[] bufSrc = new byte[8192];
byte[] bufDst = new byte[8192];
-
- try {
+ try (InputStream isSrc = Files.newInputStream(src);
+ InputStream isDst = Files.newInputStream(dst))
+ {
int nSrc = 0;
while ((nSrc = isSrc.read(bufSrc)) != -1) {
int nDst = 0;
@@ -487,24 +494,21 @@
nSrc--;
}
}
- } finally {
- isSrc.close();
- isDst.close();
}
// channels
- SeekableByteChannel chSrc = src.newByteChannel();
- SeekableByteChannel chDst = dst.newByteChannel();
- if (chSrc.size() != chDst.size()) {
- System.out.printf("src[%s].size=%d, dst[%s].size=%d%n",
- chSrc.toString(), chSrc.size(),
- chDst.toString(), chDst.size());
- throw new RuntimeException("CHECK FAILED!");
- }
- ByteBuffer bbSrc = ByteBuffer.allocate(8192);
- ByteBuffer bbDst = ByteBuffer.allocate(8192);
+ try (SeekableByteChannel chSrc = Files.newByteChannel(src);
+ SeekableByteChannel chDst = Files.newByteChannel(dst))
+ {
+ if (chSrc.size() != chDst.size()) {
+ System.out.printf("src[%s].size=%d, dst[%s].size=%d%n",
+ chSrc.toString(), chSrc.size(),
+ chDst.toString(), chDst.size());
+ throw new RuntimeException("CHECK FAILED!");
+ }
+ ByteBuffer bbSrc = ByteBuffer.allocate(8192);
+ ByteBuffer bbDst = ByteBuffer.allocate(8192);
- try {
int nSrc = 0;
while ((nSrc = chSrc.read(bbSrc)) != -1) {
int nDst = chDst.read(bbDst);
@@ -526,9 +530,6 @@
}
} catch (IOException x) {
x.printStackTrace();
- } finally {
- chSrc.close();
- chDst.close();
}
}
@@ -540,23 +541,19 @@
openwrite.add(CREATE_NEW);
openwrite.add(WRITE);
- FileChannel srcFc = src.getFileSystem()
- .provider()
- .newFileChannel(src, read);
- FileChannel dstFc = dst.getFileSystem()
- .provider()
- .newFileChannel(dst, openwrite);
-
- try {
+ try (FileChannel srcFc = src.getFileSystem()
+ .provider()
+ .newFileChannel(src, read);
+ FileChannel dstFc = dst.getFileSystem()
+ .provider()
+ .newFileChannel(dst, openwrite))
+ {
ByteBuffer bb = ByteBuffer.allocate(8192);
while (srcFc.read(bb) >= 0) {
bb.flip();
dstFc.write(bb);
bb.clear();
}
- } finally {
- srcFc.close();
- dstFc.close();
}
}
@@ -568,35 +565,29 @@
openwrite.add(CREATE_NEW);
openwrite.add(WRITE);
- SeekableByteChannel srcCh = src.newByteChannel(read);
- SeekableByteChannel dstCh = dst.newByteChannel(openwrite);
+ try (SeekableByteChannel srcCh = Files.newByteChannel(src, read);
+ SeekableByteChannel dstCh = Files.newByteChannel(dst, openwrite))
+ {
- try {
ByteBuffer bb = ByteBuffer.allocate(8192);
while (srcCh.read(bb) >= 0) {
bb.flip();
dstCh.write(bb);
bb.clear();
}
- } finally {
- srcCh.close();
- dstCh.close();
}
}
private static void streamCopy(Path src, Path dst) throws IOException
{
- InputStream isSrc = src.newInputStream();
- OutputStream osDst = dst.newOutputStream();
byte[] buf = new byte[8192];
- try {
+ try (InputStream isSrc = Files.newInputStream(src);
+ OutputStream osDst = Files.newOutputStream(dst))
+ {
int n = 0;
while ((n = isSrc.read(buf)) != -1) {
osDst.write(buf, 0, n);
}
- } finally {
- isSrc.close();
- osDst.close();
}
}
@@ -604,31 +595,35 @@
throws Exception
{
System.out.println("test ByteChannel...");
- SeekableByteChannel sbc = path.newByteChannel();
Set<OpenOption> read = new HashSet<>();
read.add(READ);
- System.out.printf(" sbc[0]: pos=%d, size=%d%n", sbc.position(), sbc.size());
- ByteBuffer bb = ByteBuffer.allocate((int)sbc.size());
- int n = sbc.read(bb);
- System.out.printf(" sbc[1]: read=%d, pos=%d, size=%d%n",
- n, sbc.position(), sbc.size());
- ByteBuffer bb2 = ByteBuffer.allocate((int)sbc.size());
+ int n = 0;
+ ByteBuffer bb = null;
+ ByteBuffer bb2 = null;
int N = 120;
- sbc.close();
+
+ try (SeekableByteChannel sbc = Files.newByteChannel(path)) {
+ System.out.printf(" sbc[0]: pos=%d, size=%d%n", sbc.position(), sbc.size());
+ bb = ByteBuffer.allocate((int)sbc.size());
+ n = sbc.read(bb);
+ System.out.printf(" sbc[1]: read=%d, pos=%d, size=%d%n",
+ n, sbc.position(), sbc.size());
+ bb2 = ByteBuffer.allocate((int)sbc.size());
+ }
// sbc.position(pos) is not supported in current version
// try the FileChannel
- sbc = fs.provider().newFileChannel(path, read);
- sbc.position(N);
- System.out.printf(" sbc[2]: pos=%d, size=%d%n",
- sbc.position(), sbc.size());
- bb2.limit(100);
- n = sbc.read(bb2);
- System.out.printf(" sbc[3]: read=%d, pos=%d, size=%d%n",
- n, sbc.position(), sbc.size());
- System.out.printf(" sbc[4]: bb[%d]=%d, bb1[0]=%d%n",
- N, bb.get(N) & 0xff, bb2.get(0) & 0xff);
- sbc.close();
+ try (SeekableByteChannel sbc = fs.provider().newFileChannel(path, read)) {
+ sbc.position(N);
+ System.out.printf(" sbc[2]: pos=%d, size=%d%n",
+ sbc.position(), sbc.size());
+ bb2.limit(100);
+ n = sbc.read(bb2);
+ System.out.printf(" sbc[3]: read=%d, pos=%d, size=%d%n",
+ n, sbc.position(), sbc.size());
+ System.out.printf(" sbc[4]: bb[%d]=%d, bb1[0]=%d%n",
+ N, bb.get(N) & 0xff, bb2.get(0) & 0xff);
+ }
}
// create parents if does not exist
@@ -637,7 +632,7 @@
{
Path path = fs.getPath(name);
Path parent = path.getParent();
- if (parent != null && parent.notExists())
+ if (parent != null && Files.notExists(parent))
mkdirs(parent);
return path;
}
--- a/jdk/test/demo/zipfs/basic.sh Tue Feb 01 21:00:09 2011 +0530
+++ b/jdk/test/demo/zipfs/basic.sh Tue Feb 01 14:20:01 2011 -0800
@@ -21,8 +21,7 @@
# questions.
#
# @test
-# @bug 6990846 7009092 7009085
-# @ignore Until zipfs updated (7015391)
+# @bug 6990846 7009092 7009085 7015391 7014948
# @summary Test ZipFileSystem demo
# @build Basic PathOps ZipFSTester
# @run shell basic.sh