📄 filecontentimpl.java
字号:
/* * Copyright (c) 2001 Sun Microsystems, Inc. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. 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. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Sun Microsystems, Inc. for Project JXTA." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact Project JXTA at http://www.jxta.org. * * 5. Products derived from this software may not be called "JXTA", * nor may "JXTA" appear in their name, without prior written * permission of Sun. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR * ITS 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. * *==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of Project JXTA. For more * information on Project JXTA, please see * <http://www.jxta.org/>. * * This license is based on the BSD license adopted by the Apache Foundation. * * $Id: FileContentImpl.java,v 1.6 2005/05/12 16:20:10 hamada Exp $ * */package net.jxta.share;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.IOException;import net.jxta.share.metadata.ContentMetadata;/* * FileContent implementation for shared content. */class FileContentImpl implements FileContent { private File file; // content file name private long mtime; // last modified time private ContentAdvertisement adv; // content advertisement /* * Creates a new FileContent object for the specified file, content * name, content type, and description. If content name is null * then it defaults to the base name of the actual file path. * @param file the content file * @param name the content name, or null if file name to be used * @param type the mime type of the content, or null if not specified * @param desc the description of the content, or null if not specified * @exception FileNotFoundException if the file was not found * @exception IOException if there was an I/O error */ FileContentImpl(File file, String name, String type, String desc) throws IOException { // normalize path name this.file = file = new File(file.getAbsolutePath()); InputStream is = new FileInputStream(file); mtime = file.lastModified(); long length = file.length(); ContentId id = new ContentIdImpl(is); is.close(); if (name == null) { name = file.getName(); } adv = new ContentAdvertisementImpl(name, id, length, type, desc); } /* * Creates a new FileContent object for the specified file, content * name, content type, and metadata. If content name is null * then it defaults to the base name of the actual file path. * @param file the content file * @param name the content name, or null if file name to be used * @param type the mime type of the content, or null if not specified * @param metadata an array of ContentMetadata objects describing the * content, or null if not specified * @exception FileNotFoundException if the file was not found * @exception IOException if there was an I/O error */ FileContentImpl(File file, String name, String type ,ContentMetadata[] metadata) throws IOException { // normalize path name this.file = file = new File(file.getAbsolutePath()); InputStream is = new FileInputStream(file); mtime = file.lastModified(); long length = file.length(); ContentId id = new ContentIdImpl(is); is.close(); if (name == null) { name = file.getName(); } adv = new ContentAdvertisementImpl(name, id, length, type, metadata, null); } /** * Returns the File object associated with this content. */ public File getFile() { return file; } /** * Returns the ContentAdvertisement. */ public ContentAdvertisement getContentAdvertisement() { return adv; } /** * Returns an input stream for reading the content. * @exception IOException if there was an I/O error */ public InputStream getInputStream() throws IOException { InputStream is = new FileInputStream(file); /* XXX may be not the right place if (mtime != file.lastModified()) { throw new IOException("File has been changed: " + file); } */ return is; } /** * Returns a string representation of this FileContent object. */ public String toString() { return "{file=" + file + ";mtime=" + mtime + ";adv=" + adv + "}"; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -