Apache Commons VFS - 如何设置文件的大小......?

时间:2011-07-18 10:13:52

标签: java apache-commons-vfs

我似乎无法在FileObject或FileContent上找到任何允许我在现有文件上设置新大小的方法。

FileContent.getSize()没有相应的setSize()RandomAccessContent确实有一些关于搜索的注释,但它似乎没有说明如果一个文件在结束之前寻找某个地方然后只是关闭文件就会缩小文件。

/**
 * Sets the file-pointer offset, measured from the beginning of this
 * file, at which the next read or write occurs.  The offset may be
 * set beyond the end of the file. Setting the offset beyond the end
 * of the file does not change the file length.  The file length will
 * change only by writing after the offset has been set beyond the end
 * of the file.
 * <br/>
 * <b>Notice: If you use {@link #getInputStream()} you have to reget the InputStream after calling {@link #seek(long)}</b>
 *
 * @param pos the offset position, measured in bytes from the
 *            beginning of the file, at which to set the file
 *            pointer.
 * @throws IOException if <code>pos</code> is less than
 *                     <code>0</code> or if an I/O error occurs.
 */
public void seek(long pos) throws IOException;

2 个答案:

答案 0 :(得分:0)

使用公共API,您无法设置大小或截断任何文件。但是,某些特殊类型确实提供了可以使用的方法。也就是说,这种方法也可能不公开,需要讨厌的反思。

答案 1 :(得分:0)

如果您想使用setSize(int size)设置尺寸,则会在某些API中设置尺寸,但在size小于file.getSize()时可能会丢失一些数据。

某些API仍允许通过将大小设置为0来截断文件,这意味着将删除内容。它实际上并没有设置size属性,而是删除数据然后刷新size属性。

为避免此类混淆,此API已删除setSize(int size)方法。

但您仍然可以通过使用outputStream引用向文件对象附加内容或从文件对象中删除内容来间接设置大小。