Module java.base
Package java.net

Class URLConnection

java.lang.Object
java.net.URLConnection
直接已知的子类:
HttpURLConnection, JarURLConnection

public abstract class URLConnection extends Object
抽象类URLConnection是表示应用程序与URL之间通信链接的所有类的超类。此类的实例既可用于从URL引用的资源中读取,也可用于向其写入。

一般而言,创建到URL的连接是一个多步骤的过程:

  1. 通过在URL上调用openConnection方法来创建连接对象。
  2. 操作设置参数和一般请求属性。
  3. 使用connect方法建立到远程对象的实际连接。
  4. 远程对象变得可用。可以访问远程对象的头字段和内容。

设置参数可使用以下方法进行修改:

  • setAllowUserInteraction
  • setDoInput
  • setDoOutput
  • setIfModifiedSince
  • setUseCaches

一般请求属性可使用以下方法进行修改:

  • setRequestProperty

可以使用方法setDefaultAllowUserInteractionsetDefaultUseCaches设置AllowUserInteractionUseCaches参数的默认值。

上述每个set方法都有一个对应的get方法,用于检索参数或一般请求属性的值。适用的特定参数和一般请求属性是特定于协议的。

在连接到远程对象后,以下方法用于访问头字段和内容:

  • getContent
  • getHeaderField
  • getInputStream
  • getOutputStream

某些头字段经常被访问。以下方法:

  • getContentEncoding
  • getContentLength
  • getContentType
  • getDate
  • getExpiration
  • getLastModified

提供对这些字段的便捷访问。getContentType方法由getContent方法用于确定远程对象的类型; 子类可能会发现重写getContentType方法很方便。

在一般情况下,可以忽略所有预连接参数和一般请求属性: 预连接参数和请求属性默认为合理值。对于此接口的大多数客户端,只有两个有趣的方法:getInputStreamgetContent,这两个方法在URL类中通过便捷方法进行了镜像。

有关http连接的请求属性和头字段的更多信息,请参阅:

 http://www.ietf.org/rfc/rfc2616.txt
 
在请求后在URLConnectionInputStreamOutputStream上调用close()方法可能会释放与此实例关联的网络资源,除非特定的协议规范为其指定了不同的行为。
自版本:
1.0
外部规范
另请参阅:
  • Field Details

    • url

      protected URL url
      该URL代表在全球网络上打开此连接的远程对象。

      此字段的值可以通过getURL方法访问。

      此变量的默认值是URLConnection构造函数中URL参数的值。

      参见:
    • doInput

      protected boolean doInput
      此变量由setDoInput方法设置。其值由getDoInput方法返回。

      URL连接可用于输入和/或输出。将doInput标志设置为true表示应用程序打算从URL连接读取数据。

      此字段的默认值为true

      参见:
    • doOutput

      protected boolean doOutput
      此变量由setDoOutput方法设置。其值由getDoOutput方法返回。

      URL连接可用于输入和/或输出。将doOutput标志设置为true表示应用程序打算向URL连接写入数据。

      此字段的默认值为false

      参见:
    • allowUserInteraction

      protected boolean allowUserInteraction
      如果为true,则正在检查此URL是否处于允许用户交互的上下文中,例如弹出身份验证对话框。如果为false,则不允许任何用户交互。

      此字段的值可以通过setAllowUserInteraction方法设置。其值由getAllowUserInteraction方法返回。其默认值是setDefaultAllowUserInteraction方法的最后一次调用中的参数值。

      参见:
    • useCaches

      protected boolean useCaches
      如果为true,则允许协议在可能的情况下使用缓存。如果为false,则协议必须始终尝试获取对象的最新副本。

      此字段由setUseCaches方法设置。其值由getUseCaches方法返回。

      其默认值是setDefaultUseCaches方法的最后一次调用中的参数值。

      可以使用setDefaultUseCaches(String,boolean)来覆盖每个协议的默认设置。

      参见:
    • ifModifiedSince

      protected long ifModifiedSince
      一些协议支持跳过获取对象,除非对象的修改时间比某个特定时间更近。

      非零值表示时间,以自1970年1月1日GMT以来的毫秒数表示。仅当对象的修改时间比该时间更近时,才会获取对象。

      此变量由setIfModifiedSince方法设置。其值由getIfModifiedSince方法返回。

      此字段的默认值为0,表示必须始终进行获取。

      参见:
    • connected

      protected boolean connected
      如果为false,则此连接对象尚未创建到指定URL的通信链接。如果为true,则已建立通信链接。
  • Constructor Details

    • URLConnection

      protected URLConnection(URL url)
      构造到指定URL的URL连接。不会创建到URL引用的对象的连接。
      参数:
      url - 指定的URL。
  • Method Details

    • getFileNameMap

      public static FileNameMap getFileNameMap()
      从数据文件加载文件名映射(mimetable)。它首先尝试加载由"content.types.user.table"属性定义的用户特定表。如果失败,则尝试加载默认内置表。
      返回:
      FileNameMap
      自:
      1.2
      参见:
    • setFileNameMap

      public static void setFileNameMap(FileNameMap map)
      设置FileNameMap。

      如果存在安全管理器,此方法首先调用安全管理器的checkSetFactory方法以确保允许该操作。这可能导致SecurityException。

      参数:
      map - 要设置的FileNameMap
      抛出:
      SecurityException - 如果存在安全管理器且其checkSetFactory方法不允许该操作。
      自:
      1.2
      参见:
    • connect

      public abstract void connect() throws IOException
      打开到此URL引用的资源的通信链接,如果尚未建立此类连接。

      如果在连接已经打开(由connected字段的值为true表示)时调用connect方法,则该调用将被忽略。

      URLConnection对象经历两个阶段:首先创建它们,然后连接它们。在创建后和连接之前,可以指定各种选项(例如,doInput和UseCaches)。连接后,尝试设置它们将导致错误。依赖于连接的操作,如getContentLength,将在必要时隐式执行连接。

      抛出:
      SocketTimeoutException - 如果超时在建立连接之前到期
      IOException - 如果在打开连接时发生I/O错误。
      参见:
    • setConnectTimeout

      public void setConnectTimeout(int timeout)
      设置用于打开到此URLConnection引用的资源的通信链接时使用的指定超时值(毫秒)。如果在建立连接之前超时到期,将引发java.net.SocketTimeoutException。超时值为零被解释为无限超时。

      此方法的某些非标准实现可能会忽略指定的超时。要查看设置的连接超时,请调用getConnectTimeout()。

      参数:
      timeout - 以毫秒为单位指定连接超时值的int
      抛出:
      IllegalArgumentException - 如果超时参数为负
      自:
      1.5
      参见:
    • getConnectTimeout

      public int getConnectTimeout()
      返回连接超时的设置。

      返回0表示该选项已禁用(即,无限超时)。

      返回:
      一个int,表示连接超时值(毫秒)
      自:
      1.5
      参见:
    • setReadTimeout

      public void setReadTimeout(int timeout)
      将读取超时设置为指定的超时时间(毫秒)。非零值指定在建立到资源的连接时从输入流读取时的超时时间。如果在可读取数据之前超时到期,将引发java.net.SocketTimeoutException。超时值为零被解释为无限超时。

      此方法的某些非标准实现可能会忽略指定的超时。要查看设置的读取超时,请调用getReadTimeout()。

      参数:
      timeout - 以毫秒为单位指定要在读取时使用的超时值的int
      抛出:
      IllegalArgumentException - 如果超时参数为负
      自:
      1.5
      参见:
    • getReadTimeout

      public int getReadTimeout()
      返回读取超时设置。返回0表示该选项已禁用(即,无限超时)。
      返回:
      一个int,表示读取超时值(以毫秒为单位)
      自版本:
      1.5
      另请参见:
    • getURL

      public URL getURL()
      返回此URLConnectionURL字段的值。
      返回:
      URLConnectionURL字段的值。
      另请参见:
    • getContentLength

      public int getContentLength()
      返回content-length头字段的值。

      注意: 应优先使用getContentLengthLong(),因为它返回一个long,因此更具可移植性。

      返回:
      此连接的URL引用的资源的内容长度,如果内容长度未知或内容长度大于Integer.MAX_VALUE,则返回-1
    • getContentLengthLong

      public long getContentLengthLong()
      返回content-length头字段的值作为长整型。
      返回:
      此连接的URL引用的资源的内容长度,如果内容长度未知,则返回-1
      自版本:
      1.7
    • getContentType

      public String getContentType()
      返回content-type头字段的值。
      返回:
      URL引用的资源的内容类型,如果未知则返回null
      另请参见:
    • getContentEncoding

      public String getContentEncoding()
      返回content-encoding头字段的值。
      返回:
      URL引用的资源的内容编码,如果未知则返回null
      另请参见:
    • getExpiration

      public long getExpiration()
      返回expires头字段的值。
      返回:
      此URL引用的资源的过期日期,如果未知则返回0。该值是自1970年1月1日GMT以来的毫秒数。
      另请参见:
    • getDate

      public long getDate()
      返回date头字段的值。
      返回:
      URL引用的资源的发送日期,如果未知则返回0。返回值是自1970年1月1日GMT以来的毫秒数。
      另请参见:
    • getLastModified

      public long getLastModified()
      返回last-modified头字段的值。结果是自1970年1月1日GMT以来的毫秒数。
      返回:
      URLConnection引用的资源上次修改的日期,如果未知则返回0。
      另请参见:
    • getHeaderField

      public String getHeaderField(String name)
      返回指定头字段的值。

      如果在可能使用不同值多次设置相同头字段的连接上调用此方法,则仅返回最后一个值。

      参数:
      name - 头字段的名称。
      返回:
      指定头字段的值,如果头中没有这样的字段则返回null
    • getHeaderFields

      public Map<String,List<String>> getHeaderFields()
      返回头字段的不可修改Map。Map键是表示响应头字段名称的字符串。每个Map值是表示相应字段值的不可修改字符串列表。此方法被URLConnection的子类覆盖。在这些方法的实现中,如果给定键具有多个对应值,则必须按添加顺序返回它们,保留插入顺序。
      实现要求:
      此方法的默认实现始终返回一个空映射。
      返回:
      一个头字段的Map
      自版本:
      1.4
    • getHeaderFieldInt

      public int getHeaderFieldInt(String name, int defaultValue)
      返回解析为数字的指定字段的值。

      存在此形式的getHeaderField是因为某些连接类型(例如,http-ng)具有预解析的头。该连接类型的类可以覆盖此方法并绕过解析。

      参数:
      name - 头字段的名称。
      defaultValue - 默认值。
      返回:
      解析为整数的指定字段的值。如果字段缺失或格式错误,则返回defaultValue值。
    • getHeaderFieldLong

      public long getHeaderFieldLong(String name, long defaultValue)
      返回解析为数字的指定字段的值。

      存在此形式的getHeaderField是因为某些连接类型(例如,http-ng)具有预解析的头。该连接类型的类可以覆盖此方法并绕过解析。

      参数:
      name - 头字段的名称。
      defaultValue - 默认值。
      返回:
      解析为长整型的指定字段的值。如果字段缺失或格式错误,则返回defaultValue值。
      自版本:
      1.7
    • getHeaderFieldDate

      public long getHeaderFieldDate(String name, long defaultValue)
      返回解析为日期的指定字段的值。结果是由指定字段表示的自1970年1月1日GMT以来的毫秒数。

      存在此形式的getHeaderField是因为某些连接类型(例如,http-ng)具有预解析的头。该连接类型的类可以覆盖此方法并绕过解析。

      参数:
      name - 头字段的名称。
      defaultValue - 默认值。
      返回:
      解析为日期的字段的值。如果字段缺失或格式错误,则返回defaultValue参数的值。
    • getHeaderFieldKey

      public String getHeaderFieldKey(int n)
      返回第n个头字段的键。某些实现可能将第0个头字段视为特殊情况,在这种情况下,getHeaderField(0)可能返回某个值,但getHeaderFieldKey(0)返回null。对于n > 0 ,如果字段少于n+1个,则返回null
      参数:
      n - 一个索引,其中n>=0
      返回:
      n个头字段的键,如果字段少于n+1个且n > 0
    • getHeaderField

      public String getHeaderField(int n)
      返回第n个头字段的值。如果字段少于n+1个,则返回null

      此方法可与getHeaderFieldKey方法结合使用,以遍历消息中的所有头字段。

      参数:
      n - 一个索引,其中n>=0
      返回:
      n个头字段的值,如果字段少于n+1个则返回null
      另请参见:
    • getContent

      public Object getContent() throws IOException
      检索此URL连接的内容。

      此方法首先通过调用getContentType方法确定对象的内容类型。如果这是应用程序首次看到该特定内容类型,则会创建该内容类型的内容处理程序。

      操作如下:

      1. 如果应用程序已使用setContentHandlerFactory方法设置了内容处理程序工厂实例,则将该实例的createContentHandler方法以内容类型作为参数调用;结果是该内容类型的内容处理程序。
      2. 如果尚未设置ContentHandlerFactory,或者工厂的createContentHandler方法返回null,则使用ServiceLoader机制使用系统类加载器定位ContentHandlerFactory实现。定位工厂的顺序是特定于实现的,并且实现可以缓存已定位的工厂。如果从createContentHandler抛出ServiceConfigurationErrorErrorRuntimeException,则将传播给调用线程。对于每个工厂的createContentHandler方法(如果已实例化),都会调用该方法,直到某个工厂返回非空值,或者所有工厂都已用尽。
      3. 如果失败,则此方法尝试加载由ContentHandler定义的内容处理程序类。如果类不存在或不是ContentHandler的子类,则抛出UnknownServiceException
      返回值:
      获取的对象。应使用instanceof运算符来确定返回的具体对象类型。
      抛出:
      IOException - 如果在获取内容时发生I/O错误。
      UnknownServiceException - 如果协议不支持内容类型。
      参见:
    • getContent

      public Object getContent(Class<?>[] classes) throws IOException
      检索此URL连接的内容。
      参数:
      classes - 表示请求类型的Class数组
      返回值:
      获取的对象,是在classes数组中指定类型的第一个匹配项。如果不支持任何请求的类型,则返回null。应使用instanceof运算符来确定返回的具体对象类型。
      抛出:
      IOException - 如果在获取内容时发生I/O错误。
      UnknownServiceException - 如果协议不支持内容类型。
      自从:
      1.3
      参见:
    • getPermission

      public Permission getPermission() throws IOException
      返回表示此对象所代表的连接所需权限的权限对象。如果不需要权限来建立连接,则此方法返回null。默认情况下,此方法返回java.security.AllPermission。子类应重写此方法并返回最能代表连接到URL所需权限的权限。例如,表示file: URL的URLConnection将返回一个java.io.FilePermission对象。

      返回的权限可能取决于连接的状态。例如,在连接之前的权限可能与连接后的权限不同。例如,一个HTTP服务器,比如foo.com,可能会将连接重定向到另一个主机,比如bar.com。在连接之前,连接返回的权限将代表连接到foo.com所需的权限,而连接后返回的权限将是连接到bar.com所需的权限。

      权限通常用于两个目的:保护通过URLConnection获取的对象的缓存,并检查接收者有权了解特定URL的权限。在第一种情况下,应在获取对象之后获取权限。例如,在HTTP连接中,这将表示连接到最终获取数据的主机所需的权限。在第二种情况下,应在连接之前获取和测试权限。

      返回值:
      表示由此URLConnection表示的连接所需权限的权限对象。
      抛出:
      IOException - 如果计算权限需要网络或文件I/O,并且在计算时发生异常。
    • getInputStream

      public InputStream getInputStream() throws IOException
      返回从此打开连接读取的输入流。如果在返回的输入流读取数据之前读取超时到期,则可能会抛出SocketTimeoutException。
      API注释:
      此方法返回的InputStream可以包装一个InflaterInputStream,其read(byte[], int, int)方法可以修改输出缓冲区的任何元素。
      返回值:
      从此打开连接读取的输入流。
      抛出:
      IOException - 如果在创建输入流时发生I/O错误。
      UnknownServiceException - 如果协议不支持输入。
      参见:
    • getOutputStream

      public OutputStream getOutputStream() throws IOException
      返回写入此连接的输出流。
      返回值:
      写入此连接的输出流。
      抛出:
      IOException - 如果在创建输出流时发生I/O错误。
      UnknownServiceException - 如果协议不支持输出。
    • toString

      public String toString()
      返回此URL连接的String表示形式。
      覆盖:
      toString 在类 Object
      返回值:
      URLConnection的字符串表示形式。
    • setDoInput

      public void setDoInput(boolean doinput)
      将此URLConnectiondoInput字段的值设置为指定值。

      URL连接可用于输入和/或输出。如果打算使用URL连接进行输入,则将doInput标志设置为true,否则设置为false。默认值为true。

      参数:
      doinput - 新值。
      抛出:
      IllegalStateException - 如果已连接
      参见:
    • getDoInput

      public boolean getDoInput()
      返回此URLConnectiondoInput标志的值。
      返回值:
      URLConnectiondoInput标志的值。
      参见:
    • setDoOutput

      public void setDoOutput(boolean dooutput)
      将此URLConnectiondoOutput字段的值设置为指定值。

      URL连接可用于输入和/或输出。如果打算使用URL连接进行输出,则将doOutput标志设置为true,否则设置为false。默认值为false。

      参数:
      dooutput - 新值。
      抛出:
      IllegalStateException - 如果已连接
      参见:
    • getDoOutput

      public boolean getDoOutput()
      返回此URLConnectiondoOutput标志的值。
      返回值:
      URLConnectiondoOutput标志的值。
      参见:
    • setAllowUserInteraction

      public void setAllowUserInteraction(boolean allowuserinteraction)
      设置此URLConnectionallowUserInteraction字段的值。
      参数:
      allowuserinteraction - 新值。
      抛出:
      IllegalStateException - 如果已连接
      参见:
    • getAllowUserInteraction

      public boolean getAllowUserInteraction()
      返回此对象的allowUserInteraction字段的值。
      返回值:
      此对象的allowUserInteraction字段的值。
      参见:
    • setDefaultAllowUserInteraction

      public static void setDefaultAllowUserInteraction(boolean defaultallowuserinteraction)
      将所有未来的URLConnection对象的allowUserInteraction字段的默认值设置为指定值。
      参数:
      defaultallowuserinteraction - 新值。
      参见:
    • getDefaultAllowUserInteraction

      public static boolean getDefaultAllowUserInteraction()
      返回allowUserInteraction字段的默认值。

      此默认值是"粘性"的,是所有URLConnection的静态状态的一部分。此标志适用于接下来创建的下一个和所有后续的URLConnection。

      返回值:
      allowUserInteraction字段的默认值。
      参见:
    • setUseCaches

      public void setUseCaches(boolean usecaches)
      将此URLConnectionuseCaches字段的值设置为指定值。

      一些协议会对文档进行缓存。偶尔,能够"穿透"并忽略缓存是很重要的(例如,浏览器中的"重新加载"按钮)。如果连接的UseCaches标志为true,则允许连接使用它可以使用的所有缓存。如果为false,则应忽略缓存。默认值来自defaultUseCaches,默认为true。还可以使用setDefaultUseCaches(String,boolean)为每个协议设置默认值。

      参数:
      usecaches - 一个表示是否允许缓存的boolean
      抛出:
      IllegalStateException - 如果已经连接
      参见:
    • getUseCaches

      public boolean getUseCaches()
      返回此URLConnectionuseCaches字段的值。
      返回:
      URLConnectionuseCaches字段的值。
      参见:
    • setIfModifiedSince

      public void setIfModifiedSince(long ifmodifiedsince)
      将此URLConnectionifModifiedSince字段的值设置为指定值。
      参数:
      ifmodifiedsince - 新值。
      抛出:
      IllegalStateException - 如果已经连接
      参见:
    • getIfModifiedSince

      public long getIfModifiedSince()
      返回此对象的ifModifiedSince字段的值。
      返回:
      此对象的ifModifiedSince字段的值。
      参见:
    • getDefaultUseCaches

      public boolean getDefaultUseCaches()
      返回URLConnectionuseCaches标志的默认值。

      此默认值是“粘性”的,是所有URLConnection的静态状态的一部分。此标志适用于接下来创建的所有URLConnection,以及所有后续创建的URLConnection。可以使用setDefaultUseCaches(String,boolean)按协议覆盖此默认值

      返回:
      URLConnectionuseCaches标志的默认值。
      参见:
    • setDefaultUseCaches

      public void setDefaultUseCaches(boolean defaultusecaches)
      useCaches字段的默认值设置为指定值。可以使用setDefaultUseCaches(String,boolean)按协议覆盖此默认值。
      参数:
      defaultusecaches - 新值。
      参见:
    • setDefaultUseCaches

      public static void setDefaultUseCaches(String protocol, boolean defaultVal)
      将指定协议的useCaches字段的默认值设置为给定值。此值将覆盖由setDefaultUseCaches(boolean)为给定协议设置的任何默认设置。对此方法的连续调用将更改设置并影响该协议的所有未来连接的默认值。协议名称不区分大小写。
      参数:
      protocol - 要为其设置默认值的协议
      defaultVal - 给定协议是否默认启用缓存
      自版本:
      9
    • getDefaultUseCaches

      public static boolean getDefaultUseCaches(String protocol)
      返回给定协议的useCaches标志的默认值。如果为给定协议调用了setDefaultUseCaches(String,boolean),则返回该值。否则,如果调用了setDefaultUseCaches(boolean),则返回该值。如果两种方法都没有被调用,则返回值为true。协议名称不区分大小写。
      参数:
      protocol - 需要其默认UseCaches设置的协议
      返回:
      给定协议的useCaches标志的默认值。
      自版本:
      9
    • setRequestProperty

      public void setRequestProperty(String key, String value)
      设置通用请求属性。如果具有相同键的属性已经存在,则用新值覆盖其值。

      注意:HTTP要求所有可以合法具有相同键的多个实例的请求属性使用逗号分隔的列表语法,这使得多个属性可以附加到单个属性中。

      参数:
      key - 请求所知的关键字(例如,"Accept")。
      value - 与之关联的值。
      抛出:
      IllegalStateException - 如果已经连接
      NullPointerException - 如果键为null
      参见:
    • addRequestProperty

      public void addRequestProperty(String key, String value)
      添加由键值对指定的通用请求属性。如果已存在与相同键关联的值,则此方法不会覆盖现有值。如果在给定子类中使用的协议不支持将值附加到映射,则此方法可能不执行任何操作。
      参数:
      key - 请求所知的关键字(例如,"Accept")。
      value - 与之关联的值。
      抛出:
      IllegalStateException - 如果已经连接
      NullPointerException - 如果键为null
      自版本:
      1.4
      参见:
    • getRequestProperty

      public String getRequestProperty(String key)
      返回此连接的指定命名通用请求属性的值。
      参数:
      key - 请求所知的关键字(例如,"Accept")。
      返回:
      此连接的指定命名通用请求属性的值。如果键为null,则返回null。
      抛出:
      IllegalStateException - 如果已经连接
      参见:
    • getRequestProperties

      public Map<String,List<String>> getRequestProperties()
      返回此连接的通用请求属性的不可修改Map。Map键是表示请求标头字段名称的字符串。每个Map值是表示相应字段值的不可修改字符串列表。如果通过addRequestProperty(String, String)方法添加了给定键的多个值,则这些值将按添加顺序返回。此方法必须保留这些值的插入顺序。当为给定键添加多个值时,此方法的默认实现保留插入顺序。这些值按添加顺序返回。
      返回:
      此连接的通用请求属性的Map。
      抛出:
      IllegalStateException - 如果已经连接
      自版本:
      1.4
    • setDefaultRequestProperty

      @Deprecated public static void setDefaultRequestProperty(String key, String value)
      Deprecated.
      The instance specific setRequestProperty method should be used after an appropriate instance of URLConnection is obtained. Invoking this method will have no effect.
      设置通用请求属性的默认值。创建URLConnection时,将使用这些属性进行初始化。
      参数:
      key - 请求所知的关键字(例如,"Accept")。
      value - 与键关联的值。
      参见:
    • getDefaultRequestProperty

      @Deprecated public static String getDefaultRequestProperty(String key)
      Deprecated.
      The instance specific getRequestProperty method should be used after an appropriate instance of URLConnection is obtained.
      返回默认请求属性的值。默认请求属性将设置为每个连接。
      参数:
      key - 请求所知的关键字(例如,"Accept")。
      返回:
      指定键的默认请求属性的值。
      参见:
    • setContentHandlerFactory

      public static void setContentHandlerFactory(ContentHandlerFactory fac)
      设置应用程序的ContentHandlerFactory。应用程序最多可以调用一次此方法。

      ContentHandlerFactory实例用于根据内容类型构造内容处理程序。

      如果存在安全管理器,此方法首先调用安全管理器的checkSetFactory方法以确保允许该操作。这可能导致SecurityException。

      参数:
      fac - 所需的工厂。
      抛出:
      Error - 如果工厂已经定义。
      SecurityException - 如果存在安全管理器且其checkSetFactory方法不允许该操作。
      参见:
    • guessContentTypeFromName

      public static String guessContentTypeFromName(String fname)
      尝试根据URL的指定“file”组件确定对象的内容类型。这是一个方便的方法,可以被覆盖getContentType方法的子类使用。
      参数:
      fname - 文件名。
      返回:
      根据文件名猜测对象的内容类型。
      参见:
    • guessContentTypeFromStream

      public static String guessContentTypeFromStream(InputStream is) throws IOException
      尝试根据输入流开头的字符确定输入流的类型。此方法可供覆盖getContentType方法的子类使用。

      理想情况下,不应该需要此例程。但许多http服务器返回不正确的内容类型;此外,还有许多非标准扩展。直接检查字节以确定内容类型通常比相信http服务器声明的内容类型更准确。

      参数:
      is - 支持标记的输入流。
      返回:
      猜测的内容类型,如果无法确定则返回null
      抛出:
      IOException - 在读取输入流时发生I/O错误时抛出。
      参见: