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

📄 poifsdocument.java

📁 java 报表 to office文档: 本包由java语言开发
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* ====================================================================   Copyright 2002-2004   Apache Software Foundation   Licensed under the Apache License, Version 2.0 (the "License");   you may not use this file except in compliance with the License.   You may obtain a copy of the License at       http://www.apache.org/licenses/LICENSE-2.0   Unless required by applicable law or agreed to in writing, software   distributed under the License is distributed on an "AS IS" BASIS,   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   See the License for the specific language governing permissions and   limitations under the License.==================================================================== */        package org.apache.poi.poifs.filesystem;import java.io.*;import java.util.*;import org.apache.poi.poifs.common.POIFSConstants;import org.apache.poi.poifs.dev.POIFSViewable;import org.apache.poi.poifs.property.DocumentProperty;import org.apache.poi.poifs.property.Property;import org.apache.poi.poifs.storage.BlockWritable;import org.apache.poi.poifs.storage.ListManagedBlock;import org.apache.poi.poifs.storage.DocumentBlock;import org.apache.poi.poifs.storage.RawDataBlock;import org.apache.poi.poifs.storage.SmallDocumentBlock;import org.apache.poi.util.HexDump;/** * This class manages a document in the POIFS filesystem. * * @author Marc Johnson (mjohnson at apache dot org) */public class POIFSDocument    implements BATManaged, BlockWritable, POIFSViewable{    private DocumentProperty _property;    private int              _size;    // one of these stores will be valid    private SmallBlockStore  _small_store;    private BigBlockStore    _big_store;    /**     * Constructor from large blocks     *     * @param name the name of the POIFSDocument     * @param blocks the big blocks making up the POIFSDocument     * @param length the actual length of the POIFSDocument     *     * @exception IOException     */    public POIFSDocument(final String name, final RawDataBlock [] blocks,                         final int length)        throws IOException    {        _size        = length;        _big_store   = new BigBlockStore(blocks);        _property    = new DocumentProperty(name, _size);        _small_store = new SmallBlockStore(new BlockWritable[ 0 ]);        _property.setDocument(this);    }    /**     * Constructor from small blocks     *     * @param name the name of the POIFSDocument     * @param blocks the small blocks making up the POIFSDocument     * @param length the actual length of the POIFSDocument     */    public POIFSDocument(final String name,                         final SmallDocumentBlock [] blocks, final int length)    {        _size = length;        try        {            _big_store = new BigBlockStore(new RawDataBlock[ 0 ]);        }        catch (IOException ignored)        {            // can't happen with that constructor        }        _property    = new DocumentProperty(name, _size);        _small_store = new SmallBlockStore(blocks);        _property.setDocument(this);    }    /**     * Constructor from small blocks     *     * @param name the name of the POIFSDocument     * @param blocks the small blocks making up the POIFSDocument     * @param length the actual length of the POIFSDocument     *     * @exception IOException     */    public POIFSDocument(final String name, final ListManagedBlock [] blocks,                         final int length)        throws IOException    {        _size     = length;        _property = new DocumentProperty(name, _size);        _property.setDocument(this);        if (Property.isSmall(_size))        {            _big_store   = new BigBlockStore(new RawDataBlock[ 0 ]);            _small_store = new SmallBlockStore(blocks);        }        else        {            _big_store   = new BigBlockStore(blocks);            _small_store = new SmallBlockStore(new BlockWritable[ 0 ]);        }    }    /**     * Constructor     *     * @param name the name of the POIFSDocument     * @param stream the InputStream we read data from     *     * @exception IOException thrown on read errors     */    public POIFSDocument(final String name, final InputStream stream)        throws IOException    {        List blocks = new ArrayList();        _size = 0;        while (true)        {            DocumentBlock block     = new DocumentBlock(stream);            int           blockSize = block.size();            if (blockSize > 0)            {                blocks.add(block);                _size += blockSize;            }            if (block.partiallyRead())            {                break;            }        }        DocumentBlock[] bigBlocks =            ( DocumentBlock [] ) blocks.toArray(new DocumentBlock[ 0 ]);        _big_store = new BigBlockStore(bigBlocks);        _property  = new DocumentProperty(name, _size);        _property.setDocument(this);        if (_property.shouldUseSmallBlocks())        {            _small_store =                new SmallBlockStore(SmallDocumentBlock.convert(bigBlocks,                    _size));            _big_store   = new BigBlockStore(new DocumentBlock[ 0 ]);        }        else        {            _small_store = new SmallBlockStore(new BlockWritable[ 0 ]);        }    }    /**     * Constructor     *     * @param name the name of the POIFSDocument     * @param size the length of the POIFSDocument     * @param path the path of the POIFSDocument     * @param writer the writer who will eventually write the document     *               contents     *     * @exception IOException thrown on read errors     */    public POIFSDocument(final String name, final int size,                         final POIFSDocumentPath path,                         final POIFSWriterListener writer)        throws IOException    {        _size     = size;        _property = new DocumentProperty(name, _size);        _property.setDocument(this);        if (_property.shouldUseSmallBlocks())        {            _small_store = new SmallBlockStore(path, name, size, writer);            _big_store   = new BigBlockStore(new Object[ 0 ]);        }        else        {            _small_store = new SmallBlockStore(new BlockWritable[ 0 ]);            _big_store   = new BigBlockStore(path, name, size, writer);        }    }    /**     * return the array of SmallDocumentBlocks used     *     * @return array of SmallDocumentBlocks; may be empty, cannot be null     */    public BlockWritable [] getSmallBlocks()    {        return _small_store.getBlocks();    }    /**     * @return size of the document     */    public int getSize()    {        return _size;    }    /**     * read data from the internal stores     *     * @param buffer the buffer to write to     * @param offset the offset into our storage to read from     */    void read(final byte [] buffer, final int offset)    {        if (_property.shouldUseSmallBlocks())        {            SmallDocumentBlock.read(_small_store.getBlocks(), buffer, offset);        }        else        {            DocumentBlock.read(_big_store.getBlocks(), buffer, offset);        }    }    /**     * Get the DocumentProperty     *     * @return the instance's DocumentProperty     */    DocumentProperty getDocumentProperty()    {        return _property;    }    /* ********** START implementation of BlockWritable ********** */    /**     * Write the storage to an OutputStream     *     * @param stream the OutputStream to which the stored data should     *               be written     *     * @exception IOException on problems writing to the specified     *            stream     */    public void writeBlocks(final OutputStream stream)        throws IOException    {        _big_store.writeBlocks(stream);    }    /* **********  END  implementation of BlockWritable ********** */    /* ********** START implementation of BATManaged ********** */    /**     * Return the number of BigBlock's this instance uses     *     * @return count of BigBlock instances     */    public int countBlocks()    {        return _big_store.countBlocks();    }    /**     * Set the start block for this instance     *     * @param index index into the array of blocks making up the     *        filesystem     */    public void setStartBlock(final int index)    {        _property.setStartBlock(index);    }    /* **********  END  implementation of BATManaged ********** */    /* ********** START begin implementation of POIFSViewable ********** */    /**     * Get an array of objects, some of which may implement     * POIFSViewable     *     * @return an array of Object; may not be null, but may be empty     */    public Object [] getViewableArray()    {        Object[] results = new Object[ 1 ];        String   result;

⌨️ 快捷键说明

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