⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 copycompare.java

📁 java 读写word excel ppt
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            if (!equal)            {                msg.append("Property sets are not equal.\n");                return equal;            }        }        else        {            int i1;            int i2;            do            {                i1 = dis1.read();                i2 = dis2.read();                if (i1 != i2)                {                    equal = false;                    msg.append("Documents are not equal.\n");                    break;                }            }            while (equal && i1 == -1);        }        return true;    }    /**     * <p>This class does all the work. Its method {@link     * #processPOIFSReaderEvent(POIFSReaderEvent)} is called for each file in     * the original POI file system. Except for property set streams it copies     * everything unmodified to the destination POI filesystem. Property set     * streams are copied by creating a new {@link PropertySet} from the     * original property set by using the {@link     * MutablePropertySet#MutablePropertySet(PropertySet)} constructor.</p>     */    static class CopyFile implements POIFSReaderListener    {        String dstName;        OutputStream out;        POIFSFileSystem poiFs;        /**         * <p>The constructor of a {@link CopyFile} instance creates the target         * POIFS. It also stores the name of the file the POIFS will be written         * to once it is complete.</p>         *          * @param dstName The name of the disk file the destination POIFS is to         * be written to.         */        public CopyFile(final String dstName)        {            this.dstName = dstName;            poiFs = new POIFSFileSystem();        }        /**         * <p>The method is called by POI's eventing API for each file in the         * origin POIFS.</p>         */        public void processPOIFSReaderEvent(final POIFSReaderEvent event)        {            /* The following declarations are shortcuts for accessing the             * "event" object. */            final POIFSDocumentPath path = event.getPath();            final String name = event.getName();            final DocumentInputStream stream = event.getStream();            Throwable t = null;            try            {                /* Find out whether the current document is a property set                 * stream or not. */                if (PropertySet.isPropertySetStream(stream))                {                    /* Yes, the current document is a property set stream.                     * Let's create a PropertySet instance from it. */                    PropertySet ps = null;                    try                    {                        ps = PropertySetFactory.create(stream);                    }                    catch (NoPropertySetStreamException ex)                    {                        /* This exception will not be thrown because we already                         * checked above. */                    }                    /* Copy the property set to the destination POI file                     * system. */                    copy(poiFs, path, name, ps);                }                else                    /* No, the current document is not a property set stream. We                     * copy it unmodified to the destination POIFS. */                    copy(poiFs, event.getPath(), event.getName(), stream);            }            catch (MarkUnsupportedException ex)            {                t = ex;            }            catch (IOException ex)            {                t = ex;            }            catch (WritingNotSupportedException ex)            {                t = ex;            }            /* According to the definition of the processPOIFSReaderEvent method             * we cannot pass checked exceptions to the caller. The following             * lines check whether a checked exception occured and throws an             * unchecked exception. The message of that exception is that of             * the underlying checked exception. */            if (t != null)            {                throw new HPSFRuntimeException                    ("Could not read file \"" + path + "/" + name +                     "\". Reason: " + Util.toString(t));            }        }        /**         * <p>Writes a {@link PropertySet} to a POI filesystem.</p>         *         * @param poiFs The POI filesystem to write to.         * @param path The file's path in the POI filesystem.         * @param name The file's name in the POI filesystem.         * @param ps The property set to write.         * @throws WritingNotSupportedException          * @throws IOException          */        public void copy(final POIFSFileSystem poiFs,                         final POIFSDocumentPath path,                         final String name,                         final PropertySet ps)            throws WritingNotSupportedException, IOException        {            final DirectoryEntry de = getPath(poiFs, path);            final MutablePropertySet mps = new MutablePropertySet(ps);            de.createDocument(name, mps.toInputStream());        }        /**         * <p>Copies the bytes from a {@link DocumentInputStream} to a new         * stream in a POI filesystem.</p>         *         * @param poiFs The POI filesystem to write to.         * @param path The source document's path.         * @param name The source document's name.         * @param stream The stream containing the source document.         * @throws IOException          */        public void copy(final POIFSFileSystem poiFs,                         final POIFSDocumentPath path,                         final String name,                         final DocumentInputStream stream) throws IOException        {            final DirectoryEntry de = getPath(poiFs, path);            final ByteArrayOutputStream out = new ByteArrayOutputStream();            int c;            while ((c = stream.read()) != -1)                out.write(c);            stream.close();            out.close();            final InputStream in =                new ByteArrayInputStream(out.toByteArray());            de.createDocument(name, in);        }        /**         * <p>Writes the POI file system to a disk file.</p>         *         * @throws FileNotFoundException         * @throws IOException         */        public void close() throws FileNotFoundException, IOException        {            out = new FileOutputStream(dstName);            poiFs.writeFilesystem(out);            out.close();        }        /** Contains the directory paths that have already been created in the         * output POI filesystem and maps them to their corresponding         * {@link org.apache.poi.poifs.filesystem.DirectoryNode}s. */        private final Map paths = new HashMap();        /**         * <p>Ensures that the directory hierarchy for a document in a POI         * fileystem is in place. When a document is to be created somewhere in         * a POI filesystem its directory must be created first. This method         * creates all directories between the POI filesystem root and the         * directory the document should belong to which do not yet exist.</p>         *          * <p>Unfortunately POI does not offer a simple method to interrogate         * the POIFS whether a certain child node (file or directory) exists in         * a directory. However, since we always start with an empty POIFS which         * contains the root directory only and since each directory in the         * POIFS is created by this method we can maintain the POIFS's directory         * hierarchy ourselves: The {@link DirectoryEntry} of each directory         * created is stored in a {@link Map}. The directories' path names map         * to the corresponding {@link DirectoryEntry} instances.</p>         *         * @param poiFs The POI filesystem the directory hierarchy is created         * in, if needed.         * @param path The document's path. This method creates those directory         * components of this hierarchy which do not yet exist.         * @return The directory entry of the document path's parent. The caller         * should use this {@link DirectoryEntry} to create documents in it.         */        public DirectoryEntry getPath(final POIFSFileSystem poiFs,                                      final POIFSDocumentPath path)        {            try            {                /* Check whether this directory has already been created. */                final String s = path.toString();                DirectoryEntry de = (DirectoryEntry) paths.get(s);                if (de != null)                    /* Yes: return the corresponding DirectoryEntry. */                    return de;                /* No: We have to create the directory - or return the root's                 * DirectoryEntry. */                int l = path.length();                if (l == 0)                    /* Get the root directory. It does not have to be created                     * since it always exists in a POIFS. */                    de = poiFs.getRoot();                else                {                    /* Create a subordinate directory. The first step is to                     * ensure that the parent directory exists: */                    de = getPath(poiFs, path.getParent());                    /* Now create the target directory: */                    de = de.createDirectory(path.getComponent                                            (path.length() - 1));                }                paths.put(s, de);                return de;            }            catch (IOException ex)            {                /* This exception will be thrown if the directory already                 * exists. However, since we have full control about directory                 * creation we can ensure that this will never happen. */                ex.printStackTrace(System.err);                throw new RuntimeException(ex.toString());                /* FIXME (2): Replace the previous line by the following once we                 * no longer need JDK 1.3 compatibility. */                // throw new RuntimeException(ex);            }        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -