java.awt.datatransfer

接口
异常
java.lang.Object
  继承者 java.awt.datatransfer.DataFlavor
所有已实现的接口:
Externalizable, Serializable, Cloneable
直接已知子类:
ActivationDataFlavor

public class DataFlavor
     
extends Object
implements Externalizable, Cloneable

DataFlavor 提供有关数据的元信息。DataFlavor 通常用于访问剪切板上的数据,或者在执行拖放操作时使用。

DataFlavor 实例封装 RFC 2045RFC 2046 中定义的内容类型。内容类型通常被称为 MIME 类型。

内容类型由媒体类型(被称为基本类型)、子类型和可选参数组成。关于 MIME 类型的语法的详细信息,请参阅 RFC 2045

JRE 数据传输实现将 MIME 类型的参数 "class" 解释为一个表示形式类。表示形式类反映将被传输的对象的类。换句话说,表示形式类是由 Transferable.getTransferData(java.awt.datatransfer.DataFlavor) 返回的对象的类型。例如,imageFlavor 的 MIME 类型是 "image/x-java-image;class=java.awt.Image",基本类型是 image,子类型是 x-java-image,表示形式类是 java.awt.Image。当调用 getTransferData,且 DataFlavorimageFlavor 时,返回 java.awt.Image 的实例。要重点注意的是,DataFlavor 不会依据表示形式类进行任何错误检查。由 DataFlavor 的使用者(如 Transferable)决定是否遵守表示形式类。
注意,如果在创建 DataFlavor 时没有指定表示形式类,则使用默认表示形式类。有关 DataFlavor 的构造方法,请参阅适当的文档。

此外,具有 "text" 基本 MIME 类型的 DataFlavor 实例可能有一个 "charset" 参数。有关 "text" MIME 类型和 "charset" 参数的详细信息,请参阅 RFC 2046selectBestTextFlavor(java.awt.datatransfer.DataFlavor[])

DataFlavors 的相等性由基本类型、子类型和表示形式类决定。有关详细信息,请参阅 equals(DataFlavor)。在确定相等性时,所有可选参数都被忽略。例如,以下代码产生的两个 DataFlavors 被认为是相等的:

   DataFlavor flavor1 = new DataFlavor(Object.class, "X-test/test; class=<java.lang.Object>; foo=bar");
   DataFlavor flavor2 = new DataFlavor(Object.class, "X-test/test; class=<java.lang.Object>; x=y");
   // The following returns true.
   flavor1.equals(flavor2);
 
正如上面提到的那样, flavor1flavor2 被认为是相等的。同样地,请求 TransferableDataFlavor 将返回相同的结果。

有关在 Swing 中使用数据传输的更多信息,请参阅 Java Tutorial 中的 How to Use Drag and Drop and Data Transfer 一节。

另请参见:
序列化表格

字段摘要
static DataFlavor imageFlavor
          DataFlavor 表示 Java Image 类,其中:
static DataFlavor javaFileListFlavor
          要将文件列表传入 Java(及底层平台)或从中传出,需要使用此类型/子类型的 DataFlavorjava.util.List 的表示形式类。
static String javaJVMLocalObjectMimeType
          要将一个引用传输到不具有关联 MIME Content 类型的任意 Java 对象引用(跨越同一 JVM 中的 Transferable 接口),需要使用具有此类型/子类型的 DataFlavor,其中 representationClass 等于跨越 Transferable 传递的类/接口的类型。
static String javaRemoteObjectMimeType
          为了通过拖放 ACTION_LINK 操作将活动链接传递到 Remote 对象,应该使用 Mime Content 类型的 application/x-java-remote-object,其中 DataFlavor 的表示形式类表示要传输的 Remote 接口的类型。
static String javaSerializedObjectMimeType
          MIME Content 类型的 application/x-java-serialized-object 表示已变得持久的 Java 对象的图形。
static DataFlavor plainTextFlavor
          已过时。 从 1.3 开始。使用 DataFlavor.getReaderForText(Transferable) 代替 Transferable.getTransferData(DataFlavor.plainTextFlavor)
static DataFlavor stringFlavor
          DataFlavor 表示 Java Unicode String 类,其中:
 
构造方法摘要
DataFlavor()
          构造一个新的 DataFlavor
DataFlavor(Class<?> representationClass, String humanPresentableName)
          构造一个表示 Java 类的 DataFlavor
DataFlavor(String mimeType)
          根据 mimeType 字符串构造 DataFlavor
DataFlavor(String mimeType, String humanPresentableName)
          构造一个表示 MimeTypeDataFlavor
DataFlavor(String mimeType, String humanPresentableName, ClassLoader classLoader)
          构造一个表示 MimeTypeDataFlavor
 
方法摘要
 Object clone()
          返回此 DataFlavor 的副本。
 boolean equals(DataFlavor that)
          测试 DataFlavor 与此 DataFlavor 的相等性。
 boolean equals(Object o)
          测试任意 Object 与此 DataFlavor 的相等性。
 boolean equals(String s)
          已过时。 hashCode() 协定不一致,使用 isMimeTypeEqual(String) 代替。
 Class<?> getDefaultRepresentationClass()
           
 String getDefaultRepresentationClassAsString()
           
 String getHumanPresentableName()
          返回此 DataFlavor 表示的数据格式的得体的名称。
 String getMimeType()
          返回此 DataFlavor 的 MIME 类型字符串。
 String getParameter(String paramName)
          如果 paramName 等于 "humanPresentableName",则返回此 DataFlavor 的得体的名称。
 String getPrimaryType()
          返回此 DataFlavor 的基本 MIME 类型。
 Reader getReaderForText(Transferable transferable)
          获取文本 flavor 的 Reader,如果需要,则为期望的 charset(编码的)解码。
 Class<?> getRepresentationClass()
          返回请求此 DataFlavor 时,支持此 DataFlavor 的对象将返回的 Class
 String getSubType()
          返回此 DataFlavor 的子 MIME 类型。
static DataFlavor getTextPlainUnicodeFlavor()
          返回表示具有 Unicode 编码的纯文本的 DataFlavor,其中: representationClass = java.io.InputStream mimeType = "text/plain; charset=<platform default Unicode encoding>" Sun 的 Microsoft Windows 实现使用编码 utf-16le
 int hashCode()
          返回此 DataFlavor 的哈希码。
 boolean isFlavorJavaFileListType()
          如果指定的 DataFlavor 表示 File 对象列表,则返回 true。
 boolean isFlavorRemoteObjectType()
          如果指定的 DataFlavor 表示远程对象,则返回 true。
 boolean isFlavorSerializedObjectType()
          如果指定的 DataFlavor 表示序列化对象,则返回 true。
 boolean isFlavorTextType()
          返回此 DataFlavor 是否是 Java 平台此实现的有效文本 flavor。
 boolean isMimeTypeEqual(DataFlavor dataFlavor)
          比较两个 DataFlavor 对象的 mimeType
 boolean isMimeTypeEqual(String mimeType)
          返回传入的 MIME 类型的字符串表示形式是否等于此 DataFlavor 的 MIME 类型。
 boolean isMimeTypeSerializedObject()
          DataFlavor 是否表示序列化对象?
 boolean isRepresentationClassByteBuffer()
          返回此 DataFlavor 的表示形式类是 java.nio.ByteBuffer 还是其子类。
 boolean isRepresentationClassCharBuffer()
          返回此 DataFlavor 的表示形式类是 java.nio.CharBuffer 还是其子类。
 boolean isRepresentationClassInputStream()
          DataFlavor 是否表示 java.io.InputStream
 boolean isRepresentationClassReader()
          返回此 DataFlavor 的表示形式类是 java.io.Reader 还是其子类。
 boolean isRepresentationClassRemote()
          如果表示形式类为 Remote,则返回 true。
 boolean isRepresentationClassSerializable()
          如果表示形式类可序列化,则返回 true。
 boolean match(DataFlavor that)
          测试 DataFlavor 与此 DataFlavor 的相等性。
protected  String normalizeMimeType(String mimeType)
          已过时。  
protected  String normalizeMimeTypeParameter(String parameterName, String parameterValue)
          已过时。  
 void readExternal(ObjectInput is)
          根据 Serialized 状态还原此 DataFlavor
static DataFlavor selectBestTextFlavor(DataFlavor[] availableFlavors)
          从 DataFlavor 数组中选择最佳文本 DataFlavor
 void setHumanPresentableName(String humanPresentableName)
          设置此 DataFlavor 表示的数据格式的得体的名称。
 String toString()
          此 DataFlavor 及其参数的字符串表示形式。
protected static Class<?> tryToLoadClass(String className, ClassLoader fallback)
          试图从以下位置加载类:引导加载器、系统加载器、上下文加载器(如果存在)和指定的最终加载器。
 void writeExternal(ObjectOutput os)
          序列化此 DataFlavor
 
从类 java.lang.Object 继承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
 

字段详细信息

stringFlavor

public static final DataFlavor stringFlavor
DataFlavor 表示 Java Unicode String 类,其中:
     representationClass = java.lang.String
     mimeType           = "application/x-java-serialized-object"        
 


imageFlavor

public static final DataFlavor imageFlavor
DataFlavor 表示 Java Image 类,其中:
     representationClass = java.awt.Image
     mimeType            = "image/x-java-image"
 


plainTextFlavor

@Deprecated
public static final DataFlavor plainTextFlavor
已过时。  从 1.3 开始。使用 DataFlavor.getReaderForText(Transferable) 代替 Transferable.getTransferData(DataFlavor.plainTextFlavor)
DataFlavor 表示使用 Unicode 编码的纯文本,其中:
     representationClass = InputStream
     mimeType            = "text/plain; charset=unicode"
 
DataFlavor过时,因为 (1) 其表示形式为 InputStream,一个基于 8 位的表示形式,而 Unicode 是一个 16 位的字符集;(2) charset "unicode" 意义不明确。"unicode" 意味着特定平台的 Unicode 实现,而不是跨平台的实现。


javaSerializedObjectMimeType

public static final String javaSerializedObjectMimeType
MIME Content 类型的 application/x-java-serialized-object 表示已变得持久的 Java 对象的图形。与此 DataFlavor 关联的表示形式类可以标识对象的 Java 类型,这里的对象指调用 java.awt.datatransfer.getTransferData 时作为引用返回的对象。

另请参见:
常量字段值

javaFileListFlavor

public static final DataFlavor javaFileListFlavor
要将文件列表传入 Java(及底层平台)或从中传出,需要使用此类型/子类型的 DataFlavorjava.util.List 的表示形式类。要求/保证列表的每个元素都是 java.io.File 类型。


javaJVMLocalObjectMimeType

public static final String javaJVMLocalObjectMimeType
要将一个引用传输到不具有关联 MIME Content 类型的任意 Java 对象引用(跨越同一 JVM 中的 Transferable 接口),需要使用具有此类型/子类型的 DataFlavor,其中 representationClass 等于跨越 Transferable 传递的类/接口的类型。

对于具有此 MIME Content 类型的 DataFlavor,从 Transferable.getTransferData 返回的对象引用必须是 DataFlavor 的表示形式类的实例。

另请参见:
常量字段值

javaRemoteObjectMimeType

public static final String javaRemoteObjectMimeType
为了通过拖放 ACTION_LINK 操作将活动链接传递到 Remote 对象,应该使用 Mime Content 类型的 application/x-java-remote-object,其中 DataFlavor 的表示形式类表示要传输的 Remote 接口的类型。

另请参见:
常量字段值
构造方法详细信息

DataFlavor

public DataFlavor()
构造一个新的 DataFlavor。提供此构造方法的目的只是为了支持 Externalizable 接口。它不用于公共(客户端)用途。

从以下版本开始:
1.2

DataFlavor

public DataFlavor(Class<?> representationClass,
                  String humanPresentableName)
构造一个表示 Java 类的 DataFlavor

返回的 DataFlavor 将具有以下特征:

    representationClass = representationClass
    mimeType            = application/x-java-serialized-object        
 

参数:
representationClass - 用于在此 flavor 中传输数据的类
humanPresentableName - 用于标识此 flavor 的可读字符串;如果此参数为 null,则使用 MIME Content 类型的值
抛出:
NullPointerException - 如果 representationClass 为 null

DataFlavor

public DataFlavor(String mimeType,
                  String humanPresentableName)
构造一个表示 MimeTypeDataFlavor

返回的 DataFlavor 将具有以下特征:

如果 mimeType 为 "application/x-java-serialized-object; class=<representation class>",则结果与调用 new DataFlavor(Class:forName(<representation class>) 相同。

否则:

     representationClass = InputStream
     mimeType            = mimeType         
 

参数:
mimeType - 用于标识此 flavor 的 MIME 类型的字符串;如果 mimeType 没有指定 "class=" 参数,或者没有成功地加载类,则抛出 IllegalArgumentException
humanPresentableName - 用于标识此 flavor 的可读字符串;如果此参数为 null,则使用 MIME Content 类型的值
抛出:
IllegalArgumentException - 如果 mimeType 无效或者没有成功加载类
NullPointerException - 如果 mimeType 为 null

DataFlavor

public DataFlavor(String mimeType,
                  String humanPresentableName,
                  ClassLoader classLoader)
           throws ClassNotFoundException
构造一个表示 MimeTypeDataFlavor

返回的 DataFlavor 将具有以下特征:

如果 mimeType 为 "application/x-java-serialized-object; class=<representation class>",则结果与调用 new DataFlavor(Class:forName(<representation class>) 相同。

否则:

     representationClass = InputStream
     mimeType            = mimeType         
 

参数:
mimeType - 用于标识此 flavor 的 MIME 类型的字符串
humanPresentableName - 用于标识此 flavor 的可读字符串
classLoader - 要使用的类加载器
抛出:
ClassNotFoundException - 如果没有加载类
IllegalArgumentException - 如果 mimeType 无效
NullPointerException - 如果 mimeType 为 null

DataFlavor

public DataFlavor(String mimeType)
           throws ClassNotFoundException
根据 mimeType 字符串构造 DataFlavor。该字符串可以指定 "class= " 参数,以创建具有所需表示形式类的 DataFlavor。如果字符串不包含 "class=" 参数,则使用 java.io.InputStream 作为默认值。

参数:
mimeType - 用于标识此 flavor 的 MIME 类型的字符串;如果没有成功加载 "class=" 参数指定的类,则抛出 ClassNotFoundException
抛出:
ClassNotFoundException - 如果没有加载类
IllegalArgumentException - 如果 mimeType 无效
NullPointerException - 如果 mimeType 为 null
方法详细信息

tryToLoadClass

protected static final Class<?> tryToLoadClass(String className,
                                               ClassLoader fallback)
                                        throws ClassNotFoundException
试图从以下位置加载类:引导加载器、系统加载器、上下文加载器(如果存在)和指定的最终加载器。

参数:
className - 要加载的类的名称
fallback - 回退加载器
返回:
加载的类
抛出:
ClassNotFoundException - 如果未找到类

toString

public String toString()
DataFlavor 及其参数的字符串表示形式。得到的 String 包含 DataFlavor 类的名称、此 flavor 的 MIME 类型及其表示形式类。如果此 flavor 具有 "text" 的基本 MIME 类型、支持 charset 参数并且具有编码的表示形式,则还包括 flavor 的 charset。有关支持 charset 参数的文本 flavor 列表,请参阅 selectBestTextFlavor

覆盖:
Object 中的 toString
返回:
DataFlavor 的字符串表示形式
另请参见:
selectBestTextFlavor(java.awt.datatransfer.DataFlavor[])

getTextPlainUnicodeFlavor

public static final DataFlavor getTextPlainUnicodeFlavor()
返回表示具有 Unicode 编码的纯文本的 DataFlavor,其中:
     representationClass = java.io.InputStream
     mimeType            = "text/plain;
                            charset=<platform default Unicode encoding>"
 
Sun 的 Microsoft Windows 实现使用编码 utf-16le。Sun 的 Solaris 和 Linux 实现使用编码 iso-10646-ucs-2

返回:
表示具有 Unicode 编码的纯文本的 DataFlavor
从以下版本开始:
1.3

selectBestTextFlavor

public static final DataFlavor selectBestTextFlavor(DataFlavor[] availableFlavors)
DataFlavor 数组中选择最佳文本 DataFlavor。只能选择 DataFlavor.stringFlavor、等效 flavor 和具有基本 MIME "text" 类型的 flavor。

首先 Flavor 按照其 MIME 类型排序,顺序如下所示:

  • "text/sgml"
  • "text/xml"
  • "text/html"
  • "text/rtf"
  • "text/enriched"
  • "text/richtext"
  • "text/uri-list"
  • "text/tab-separated-values"
  • "text/t140"
  • "text/rfc822-headers"
  • "text/parityfec"
  • "text/directory"
  • "text/css"
  • "text/calendar"
  • "application/x-java-serialized-object"
  • "text/plain"
  • "text/<other>"

例如,在 "text/html" 上选择 "text/sgml",在 DataFlavor.plainTextFlavor 上选择 DataFlavor.stringFlavor

如果两个或更多 flavor 共享数组中的最佳 MIME 类型,则需要检查 MIME 类型以查看它是否支持 charset 参数。

以下 MIME 类型支持(或被视为支持)charset 参数:

  • "text/sgml"
  • "text/xml"
  • "text/html"
  • "text/enriched"
  • "text/richtext"
  • "text/uri-list"
  • "text/directory"
  • "text/css"
  • "text/calendar"
  • "application/x-java-serialized-object"
  • "text/plain"
以下 MIME 类型不支持(或被视为不支持)charset 参数:
  • "text/rtf"
  • "text/tab-separated-values"
  • "text/t140"
  • "text/rfc822-headers"
  • "text/parityfec"
对于 "text/<other>" MIME 类型,首先 JRE 需要确定 MIME 类型是否支持 charset 参数,它将检查该参数是否显式列入任意选择的使用该 MIME 类型的 DataFlavor 中。如果是这样,则 JRE 将假定从该点开始,MIME 类型支持 charset 参数,并且不再进行检查。如果没有显式列入该参数,则 JRE 将假定从该点开始,MIME 类型不支持 charset 参数,并且不再进行检查。因为此检查是在任意选择的 DataFlavor 上执行的,所以如果 MIME 类型支持 charset 参数,开发人员就必须确保所有具有该 "text/<other>" MIME 类型的 DataFlavor 指定了该参数。开发人员不应该依赖 JRE 用平台的默认 charset 来替代 "text/<other>" DataFlavor。不遵守此限制将导致不确定的行为。

如果数组中的最佳 MIME 类型不支持 charset 参数,则共享 MIME 类型的 flavor 按照其表示形式类排序,顺序如下所示:java.io.InputStreamjava.nio.ByteBuffer[B、<其他>。

如果两个或多个 flavor 共享最佳表示形式类,或者任何 flavor 都不具有三个指定的表示形式中的一个,则随意地选择这些 flavor 中的一个。

如果数组中的最佳 MIME 类型支持 charset 参数,则共享 MIME 类型的 flavor 按照其表示形式类排序,顺序如下所示:java.io.Readerjava.lang.Stringjava.nio.CharBuffer[C、<其他>。

如果两个或多个 flavor 共享最佳表示形式类,并且该表示形式是明确列出的四个表示形式中的一个,则非随意地选择这些 flavor 中的一个。但是,如果任何 flavor 都不是四个指定的表示形式中的一个,则通过其 charset 对 flavor 排序。Unicode charset,如 "UTF-16"、"UTF-8"、"UTF-16BE"、"UTF-16LE" 及其别名被认为是最佳的。其次选择平台默认的 charset 及其别名。"US-ASCII" 及其别名最差。所有其他 charset 都是按字母顺序选择的,但是只考虑 Java 平台的此实现所支持的 charset。

如果两个或更多 flavor 共享最佳 charset,则 flavor 再次按照其表示形式类排序,顺序如下所示:java.io.InputStreamjava.nio.ByteBuffer[B、<其他>。

如果两个或多个 flavor 共享最佳表示形式类,或者任何 flavor 都不具有三个指定的表示形式中的一个,则非随意地选择这些 flavor 中的一个。

参数:
availableFlavors - 可用 DataFlavor 的数组
返回:
按照以上指定规则的最佳(最高保真度)flavor;如果 availableFlavorsnull、长度为零或包含非文本 flavor,则返回 null
从以下版本开始:
1.3

getReaderForText

public Reader getReaderForText(Transferable transferable)
                        throws UnsupportedFlavorException,
                               IOException
获取文本 flavor 的 Reader,如果需要,则为期望的 charset(编码的)解码。受支持的表示形式类有: java.io.Readerjava.lang.Stringjava.nio.CharBuffer[Cjava.io.InputStreamjava.nio.ByteBuffer[B

因为不支持 charset 参数的文本 flavor 是以非标准格式编码的,所以应为这种 flavor 调用此方法。但是,为了维护向后兼容性,如果为这样的 flavor 调用了此方法,那么此方法会将该 flavor 视为支持 charset 参数,并相应地尝试为其解码。有关不支持 charset 参数的文本 flavor 列表,请参阅 selectBestTextFlavor

参数:
transferable - 将在此 flavor 中请求其数据的 Transferable
返回:
要读取 Transferable 数据的 Reader
抛出:
IllegalArgumentException - 如果表示形式类不是上文列出的七种之一
IllegalArgumentException - 如果 Transferable 包含 null 数据
NullPointerException - 如果 Transferablenull
UnsupportedEncodingException - 如果此 flavor 的表示形式为 java.io.InputStreamjava.nio.ByteBuffer[B,但 Java 平台的此实现不支持此 flavor 的编码
UnsupportedFlavorException - 如果 Transferable 不支持此 flavor
IOException - 如果因 I/O 错误而无法读取数据
从以下版本开始:
1.3
另请参见:
selectBestTextFlavor(java.awt.datatransfer.DataFlavor[])

getMimeType

public String getMimeType()
返回此 DataFlavor 的 MIME 类型字符串。

返回:
此 flavor 的 MIME 类型字符串

getRepresentationClass

public Class<?> getRepresentationClass()
返回请求此 DataFlavor 时,支持此 DataFlavor 的对象将返回的 Class

返回:
请求此 DataFlavor 时,支持此 DataFlavor 的对象将返回的 Class

getHumanPresentableName

public String getHumanPresentableName()
返回此 DataFlavor 表示的数据格式的得体的名称。此名称将由各个国家/地区来本地化。

返回:
DataFlavor 表示的数据格式的得体的名称

getPrimaryType

public String getPrimaryType()
返回此 DataFlavor 的基本 MIME 类型。

返回:
DataFlavor 的基本 MIME 类型

getSubType

public String getSubType()
返回此 DataFlavor 的子 MIME 类型。

返回:
DataFlavor 的子 MIME 类型

getParameter

public String getParameter(