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

📄 filehandler.java

📁 gcc的JAVA模块的源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
  {    this(pattern,	 /* limit */ 0,	 /* count */ 1,	 /* append */ false);  }  /* FIXME: Javadoc missing. */  public FileHandler(String pattern, boolean append)    throws IOException, SecurityException  {    this(pattern,	 /* limit */ 0,	 /* count */ 1,	 append);  }  /* FIXME: Javadoc missing. */  public FileHandler(String pattern, int limit, int count)    throws IOException, SecurityException  {    this(pattern, limit, count, 	 LogManager.getBooleanProperty(	   "java.util.logging.FileHandler.append",	   /* default */ false));  }  /**   * Constructs a <code>FileHandler</code> given the pattern for the   * location and name of the produced log files, the size limit, the   * number of log files thorough which the handler will rotate, and   * the <code>append</code> property.  All other property values are   * taken from the current {@link LogManager LogManager}   * configuration.   *   * @param pattern The pattern for the location and name of the   *        produced log files.  See the section on <a   *        href="#filePatterns">file name patterns</a> for details.   *        If <code>pattern</code> is <code>null</code>, the value is   *        taken from the {@link LogManager LogManager} configuration   *        property   *        <code>java.util.logging.FileHandler.pattern</code>.   *        However, this is a pecularity of the GNU implementation,   *        and Sun's API specification does not mention what behavior   *        is to be expected for <code>null</code>. Therefore,   *        applications should not rely on this feature.   *   * @param limit specifies the number of bytes a log file is   *        approximately allowed to reach before it is closed and the   *        handler switches to the next file in the rotating set.  A   *        value of zero means that files can grow without limit.   *   * @param count specifies the number of log files through which this   *        handler cycles.   *   * @param append specifies whether the handler will append log   *        records to existing files (<code>true</code>), or whether the   *        handler will clear log files upon switching to them   *        (<code>false</code>).   *   * @throws java.io.IOException FIXME: The Sun Javadoc says: "if   *         there are IO problems opening the files."  This conflicts   *         with the general principle that configuration errors do   *         not prohibit construction. Needs review.   *   * @throws SecurityException if a security manager exists and   *         the caller is not granted the permission to control   *         the logging infrastructure.   *         <p>FIXME: This seems in contrast to all other handler   *         constructors -- verify this by running tests against   *         the Sun reference implementation.   */  public FileHandler(String pattern,		     int limit,		     int count,		     boolean append)    throws IOException, SecurityException  {    super(createFileStream(pattern, limit, count, append,			   /* generation */ 0),	  "java.util.logging.FileHandler",	  /* default level */ Level.ALL,	  /* formatter */ null,	  /* default formatter */ XMLFormatter.class);    if ((limit <0) || (count < 1))      throw new IllegalArgumentException();    this.pattern = pattern;    this.limit = limit;    this.count = count;    this.append = append;  }  /* FIXME: Javadoc missing. */  private static java.io.OutputStream createFileStream(String pattern,						       int limit,						       int count,						       boolean append,						       int generation)  {    String  path;    int     unique = 0;    /* Throws a SecurityException if the caller does not have     * LoggingPermission("control").     */    LogManager.getLogManager().checkAccess();    /* Default value from the java.util.logging.FileHandler.pattern     * LogManager configuration property.     */    if (pattern == null)      pattern = LogManager.getLogManager().getProperty(                              "java.util.logging.FileHandler.pattern");    if (pattern == null)      pattern = "%h/java%u.log";    do    {      path = replaceFileNameEscapes(pattern, generation, unique, count);      try      {	File file = new File(path);	if (file.createNewFile())	  return new FileOutputStream(path, append);      }      catch (Exception ex)      {	ex.printStackTrace();	      }      unique = unique + 1;      if (pattern.indexOf("%u") < 0)        pattern = pattern + ".%u";    }    while (true);  }  /**   * Replaces the substrings <code>"/"</code> by the value of the   * system property <code>"file.separator"</code>, <code>"%t"</code>   * by the value of the system property   * <code>"java.io.tmpdir"</code>, <code>"%h"</code> by the value of   * the system property <code>"user.home"</code>, <code>"%g"</code>   * by the value of <code>generation</code>, <code>"%u"</code> by the   * value of <code>uniqueNumber</code>, and <code>"%%"</code> by a   * single percent character.  If <code>pattern<code> does   * <em>not</em> contain the sequence <code>"%g"</code>,   * the value of <code>generation</code> will be appended to   * the result.   *   * @throws NullPointerException if one of the system properties   *         <code>"file.separator"</code>,   *         <code>"java.io.tmpdir"</code>, or   *         <code>"user.home"</code> has no value and the   *         corresponding escape sequence appears in   *         <code>pattern</code>.   */  private static String replaceFileNameEscapes(String pattern,					       int generation,					       int uniqueNumber,					       int count)  {    StringBuffer buf = new StringBuffer(pattern);    String       replaceWith;    boolean      foundGeneration = false;    int pos = 0;    do    {      // Uncomment the next line for finding bugs.      // System.out.println(buf.substring(0,pos) + '|' + buf.substring(pos));            if (buf.charAt(pos) == '/')      {	/* The same value is also provided by java.io.File.separator. */	replaceWith = System.getProperty("file.separator");	buf.replace(pos, pos + 1, replaceWith);	pos = pos + replaceWith.length() - 1;	continue;      }      if (buf.charAt(pos) == '%')      {        switch (buf.charAt(pos + 1))	{	case 't':	  replaceWith = System.getProperty("java.io.tmpdir");	  break;	case 'h':	  replaceWith = System.getProperty("user.home");	  break;	case 'g':	  replaceWith = Integer.toString(generation);	  foundGeneration = true;	  break;	case 'u':	  replaceWith = Integer.toString(uniqueNumber);	  break;	case '%':	  replaceWith = "%";	  break;	default:	  replaceWith = "??";	  break; // FIXME: Throw exception?	}	buf.replace(pos, pos + 2, replaceWith);	pos = pos + replaceWith.length() - 1;	continue;      }    }    while (++pos < buf.length() - 1);    if (!foundGeneration && (count > 1))    {      buf.append('.');      buf.append(generation);    }    return buf.toString();  }  /* FIXME: Javadoc missing, implementation incomplete. */  public void publish(LogRecord record)  {    super.publish(record);    /* FIXME: Decide when to switch over. How do we get to     * the number of bytes published so far? Two possibilities:     * 1. File.length, 2. have metering wrapper around     * output stream counting the number of written bytes.     */      /* FIXME: Switch over if needed! This implementation always     * writes into a single file, i.e. behaves as if limit     * always was zero. So, the implementation is somewhat     * functional but incomplete.     */  }}

⌨️ 快捷键说明

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