鴻蒙OS Formatter

2022-07-20 15:07 更新

Formatter

java.lang.Object

|---java.util.Formatter

public final class Formatter
extends Object
implements Closeable, Flushable

printf 樣式格式字符串的解釋器。 此類提供對布局對齊和對齊、數(shù)字、字符串和日期/時間數(shù)據(jù)的通用格式以及特定于語言環(huán)境的輸出的支持。 支持常見的 Java 類型,例如 byte、BigDecimal 和 Calendar。 通過 Formattable 接口為任意用戶類型提供有限的格式定制。

格式化程序對于多線程訪問不一定是安全的。 線程安全是可選的,并且是此類中方法的用戶的責任。

Java 語言的格式化打印很大程度上受到 C 的 printf 的啟發(fā)。 盡管格式字符串與 C 相似,但已進行了一些定制以適應 Java 語言并利用其某些特性。 此外,Java 格式比 C 更嚴格; 例如,如果轉換與標志不兼容,則會引發(fā)異常。 在 C 中,不適用的標志會被默默地忽略。 因此,格式字符串旨在為 C 程序員識別,但不一定與 C 中的格式字符串完全兼容。

預期用法示例:

   StringBuilder sb = new StringBuilder();
   // Send all output to the Appendable object sb
   Formatter formatter = new Formatter(sb, Locale.US);


   // Explicit argument indices may be used to re-order output.
   formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
   // -> " d  c  b  a"


   // Optional locale as the first argument can be used to get
   // locale-specific formatting of numbers.  The precision and width can be
   // given to round and align the value.
   formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E);
   // -> "e =    +2,7183"


   // The '(' numeric flag may be used to format negative numbers with
   // parentheses rather than a minus sign.  Group separators are
   // automatically inserted.
   formatter.format("Amount gained or lost since last statement: $ %(,.2f",
                    balanceDelta);
   // -> "Amount gained or lost since last statement: $ (6,217.58)"

如以下調用所示,存在用于常見格式化請求的便捷方法:

   // Writes a formatted string to System.out.
   System.out.format("Local time: %tT", Calendar.getInstance());
   // -> "Local time: 13:34:18"


   // Writes formatted output to System.err.
   System.err.printf("Unable to open file '%1$s': %2$s",
                     fileName, exception.getMessage());
   // -> "Unable to open file 'food': No such file or directory"

像 C 的 sprintf(3) 一樣,可以使用靜態(tài)方法 String#format(String,Object...) 格式化字符串:

   // Format a string containing a date.
   import java.util.Calendar;
   import java.util.GregorianCalendar;
   import static java.util.Calendar.*;


   Calendar c = new GregorianCalendar(1995, MAY, 23);
   String s = String.format("Duke's Birthday: %1$tb %1$te, %1$tY", c);
   // -> s == "Duke's Birthday: May 23, 1995"

組織

本規(guī)范分為兩部分。 第一部分,摘要,涵蓋了基本的格式化概念。 本部分適用于希望快速入門并熟悉其他編程語言的格式化打印的用戶。 第二部分,詳細信息,涵蓋了具體的實現(xiàn)細節(jié)。 它適用于想要更精確地規(guī)范格式化行為的用戶。

概括

本節(jié)旨在提供格式化概念的簡要概述。

格式化字符串語法

每個產(chǎn)生格式化輸出的方法都需要一個格式字符串和一個參數(shù)列表。 格式字符串是一個可以包含固定文本和一個或多個嵌入格式說明符的字符串。 考慮以下示例:

   Calendar c = ...;
   String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

此格式字符串是格式方法的第一個參數(shù)。 它包含三個格式說明符“%1$tm”、“%1$te”和“%1$tY”,它們指示應如何處理參數(shù)以及應在文本中插入的位置。 格式字符串的其余部分是固定文本,包括“公爵生日:”和任何其他空格或標點符號。 參數(shù)列表包含在格式字符串之后傳遞給方法的所有參數(shù)。 在上面的示例中,參數(shù)列表的大小為 1,由日歷對象 c 組成。

  • 通用、字符和數(shù)字類型的格式說明符具有以下語法:

     %[argument_index$][flags][width][.precision]conversion 

可選的 argument_index 是一個十進制整數(shù),指示參數(shù)在參數(shù)列表中的位置。 第一個參數(shù)由“1$”引用,第二個由“2$”引用,以此類推。

可選標志是一組修改輸出格式的字符。 有效標志集取決于轉換。

可選寬度是一個十進制正整數(shù),指示要寫入輸出的最小字符數(shù)。

可選精度是一個非負十進制整數(shù),通常用于限制字符數(shù)。 具體行為取決于轉換。

所需的轉換是一個字符,指示應如何格式化參數(shù)。 給定參數(shù)的有效轉換集取決于參數(shù)的數(shù)據(jù)類型。

  • 用于表示日期和時間的類型的格式說明符具有以下語法:

     %[argument_index$][flags][width]conversion 

可選的參數(shù)索引、標志和寬度定義如上。

所需的轉換是兩個字符序列。 第一個字符是“t”或“T”。 第二個字符表示要使用的格式。 這些字符與 GNU date 和 POSIX strftime(3c) 定義的字符相似但不完全相同。

  • 與參數(shù)不對應的格式說明符具有以下語法:

     %[flags][width]conversion 

可選標志和寬度定義如上。

所需的轉換是指示要在輸出中插入的內容的字符。

轉換

轉換分為以下幾類:

  1. 一般 - 可應用于任何參數(shù)類型

  1. 字符 - 可應用于表示 Unicode 字符的基本類型:char、Character、byte、Byte、short 和 Short。 當 Character#isValidCodePoint 返回 true 時,這種轉換也可以應用于 int 和 Integer 類型

  1. 數(shù)字

  • Integral - 可應用于 Java 整數(shù)類型:byte、Byte、short、Short、int 和 Integer、long、Long 和 BigInteger(但不是 char 或 Character)

  • 浮點 - 可應用于 Java 浮點類型:float、Float、double、Double 和 BigDecimal

  1. 日期/時間 - 可應用于能夠編碼日期或時間的 Java 類型:long、Long、Calendar、Date 和 TemporalAccessor

  1. 百分比 - 產(chǎn)生一個文字 '%' ('\u0025')

  1. Line Separator - 生成特定于平臺的行分隔符

下表總結了支持的轉換。 由大寫字符表示的轉換(即“B”、“H”、“S”、“C”、“X”、“E”、“G”、“A”和“T”)是相同的 與對應的小寫轉換字符相同,只是根據(jù)當前 Locale 的規(guī)則將結果轉換為大寫。 結果等效于以下對 String#toUpperCase() 的調用

    out.toUpperCase() 

任何未明確定義為轉換的字符都是非法的,并為將來的擴展保留。

日期/時間轉換

為“t”和“T”轉換定義了以下日期和時間轉換后綴字符。 這些類型與 GNU date 和 POSIX strftime(3c) 定義的類型相似但不完全相同。 提供了其他轉換類型來訪問特定于 Java 的功能(例如,“L”表示秒內的毫秒)。

以下轉換字符用于格式化時間:

以下轉換字符用于格式化日期:

以下轉換字符用于格式化常見的日期/時間組合。

任何未明確定義為日期/時間轉換后綴的字符都是非法的,并為將來的擴展保留。

標志

下表總結了支持的標志。 y 表示指示的參數(shù)類型支持該標志。

  1. 取決于 Formattable 的定義。
  2. 僅用于“d”轉換。

  1. 僅適用于“o”、“x”和“X”轉換。

  1. 對于應用于 BigInteger 的 'd'、'o'、'x' 和 'X' 轉換或應用于 byte、Byte、short、Short、int 和 Integer、long 和 Long 的 'd'。

  1. 僅適用于“e”、“E”、“f”、“g”和“G”轉換。

任何未明確定義為標志的字符都是非法的,并為將來的擴展保留。

寬度

寬度是要寫入輸出的最小字符數(shù)。 對于行分隔符轉換,寬度不適用; 如果提供,將拋出異常。

精確

對于一般參數(shù)類型,精度是要寫入輸出的最大字符數(shù)。

對于浮點轉換“a”、“A”、“e”、“E”和“f”,精度是小數(shù)點后的位數(shù)。 如果轉換為“g”或“G”,則精度是舍入后結果幅度中的總位數(shù)。

對于字符、整數(shù)和日期/時間參數(shù)類型以及百分比和行分隔符轉換,精度不適用; 如果提供了精度,則會拋出異常。

參數(shù)索引

參數(shù)索引是一個十進制整數(shù),指示參數(shù)在參數(shù)列表中的位置。 第一個參數(shù)由“1$”引用,第二個由“2$”引用,以此類推。

按位置引用參數(shù)的另一種方法是使用 '<' ('\u003c') 標志,這會導致重新使用前一個格式說明符的參數(shù)。 例如,以下兩個語句將產(chǎn)生相同的字符串:

   Calendar c = ...;
   String s1 = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);


   String s2 = String.format("Duke's Birthday: %1$tm %<te,%<tY", c);

細節(jié)

本節(jié)旨在提供格式化的行為細節(jié),包括條件和異常、支持的數(shù)據(jù)類型、本地化以及標志、轉換和數(shù)據(jù)類型之間的交互。

任何未明確定義為轉換、日期/時間轉換后綴或標志的字符都是非法的,并為將來的擴展保留。在格式字符串中使用此類字符將導致拋出 UnknownFormatConversionException 或 UnknownFormatFlagsException。

如果格式說明符包含具有無效值或不受支持的寬度或精度,則將分別拋出 IllegalFormatWidthException 或 IllegalFormatPrecisionException。

如果格式說明符包含不適用于相應參數(shù)的轉換字符,則會拋出 IllegalFormatConversionException。

Formatter 的任何格式方法以及任何格式便利方法(例如 String#format(String,Object...) 和 PrintStream.printf)都可能引發(fā)所有指定的異常。

由大寫字符表示的轉換(即“B”、“H”、“S”、“C”、“X”、“E”、“G”、“A”和“T”)是相同的與對應的小寫轉換字符相同,只是根據(jù)當前 Locale 的規(guī)則將結果轉換為大寫。結果等效于以下對 String#toUpperCase() 的調用

    out.toUpperCase() 

一般的

以下一般轉換可應用于任何參數(shù)類型:

以下標志適用于一般轉換:

寬度是要寫入輸出的最小字符數(shù)。如果轉換后的值的長度小于寬度,則輸出將被 ' ' ('\u0020') 填充,直到字符總數(shù)等于寬度。默認情況下,填充位于左側。如果給出“-”標志,則填充將在右側。如果未指定寬度,則沒有最小值。

精度是要寫入輸出的最大字符數(shù)。精度在寬度之前應用,因此即使寬度大于精度,輸出也會被截斷為精度字符。如果未指定精度,則對字符數(shù)沒有明確限制。

字符 這種轉換可以應用于 char 和 Character。當 Character#isValidCodePoint 返回 true 時,它也可以應用于 byte、Byte、short 和 Short、int 和 Integer 類型。如果它返回 false,則會拋出 IllegalFormatCodePointException。

為常規(guī)轉換定義的“-”標志適用。如果給出了 '#' 標志,則將拋出 FormatFlagsConversionMismatchException。

寬度定義為通用轉換。

精度不適用。如果指定了精度,則會拋出 IllegalFormatPrecisionException。

數(shù)字

數(shù)值轉換分為以下幾類:

  1. Byte, Short, Integer, and Long
  2. BigInteger
  3. Float and Double
  4. BigDecimal

數(shù)字類型將根據(jù)以下算法進行格式化:

號碼定位算法

在為整數(shù)部分、小數(shù)部分和指數(shù)(根據(jù)數(shù)據(jù)類型而定)獲得數(shù)字后,將應用以下轉換:

  1. 字符串中的每個數(shù)字字符 d 被替換為相對于當前語言環(huán)境的零位 z 計算的語言環(huán)境特定數(shù)字;即 d - '0' + z。
  2. 如果存在小數(shù)分隔符,則替換特定于區(qū)域設置的小數(shù)分隔符。
  3. 如果給出',' ('\u002c') 標志,則通過從最低有效位到最高有效位掃描字符串的整數(shù)部分并在由語言環(huán)境的分組大小。
  4. 如果給出 '0' 標志,則在符號字符(如果有)之后和第一個非零數(shù)字之前插入特定于語言環(huán)境的零數(shù)字,直到字符串的長度等于請求的字段寬度.
  5. 如果值為負并且給出了 '(' 標志,則附加一個 '(' ('\u0028') 并附加一個 ')' ('\u0029')。
  6. 如果該值為負數(shù)(或浮點負零)并且沒有給出'(' 標志,則在前面加上'-' ('\u002d')。
  7. 如果給出'+' 標志并且值為正或零(或浮點正零),則將在前面加上'+' ('\u002b')。

如果值為 NaN 或正無窮大,則將分別輸出文字字符串“NaN”或“Infinity”。 如果該值為負無窮大,則如果給出了“(”標志,則輸出將為“(無窮大)”,否則輸出將為“-Infinity”。這些值未本地化。

Byte, Short, Integer, and Long

以下轉換可應用于 byte、Byte、short、Short、int 和 Integer、long 和 Long。

如果轉換為 'o'、'x' 或 'X' 并且同時給出了 '#' 和 '0' 標志,則結果將包含基數(shù)指示符('0' 表示八進制和“0x”或“ 0X" 表示十六進制)、一些零(基于寬度)和值。

如果未給出“-”標志,則空格填充將出現(xiàn)在符號之前。

以下標志適用于數(shù)值整數(shù)轉換:

如果沒有給出標志,則默認格式如下:

  • 輸出在寬度內右對齊
  • 負數(shù)以“-”開頭(“\u002d”)
  • 正數(shù)和零不包括符號或額外的前導空格
  • 不包括分組分隔符

寬度是要寫入輸出的最小字符數(shù)。 這包括任何符號、數(shù)字、分組分隔符、基數(shù)指示符和括號。 如果轉換后的值的長度小于寬度,則輸出將用空格 ('\u0020') 填充,直到字符總數(shù)等于寬度。 默認情況下,填充位于左側。 如果給出“-”標志,則填充將在右側。 如果未指定寬度,則沒有最小值。

精度不適用。 如果指定了精度,則將拋出 IllegalFormatPrecisionException。

BigInteger

以下轉換可應用于 BigInteger。

如果轉換為 'o'、'x' 或 'X' 并且同時給出了 '#' 和 '0' 標志,則結果將包含基本指示符('0' 表示八進制和“0x”或“ 0X" 表示十六進制)、一些零(基于寬度)和值。

如果給出'0'標志并且值為負,則零填充將出現(xiàn)在符號之后。

如果未給出“-”標志,則空格填充將出現(xiàn)在符號之前。

為 Byte、Short、Integer 和 Long 定義的所有標志都適用。 未給出標志時的默認行為與 Byte、Short、Integer 和 Long 相同。

寬度的規(guī)格與 Byte、Short、Integer 和 Long 的定義相同。

精度不適用。 如果指定了精度,則將拋出 IllegalFormatPrecisionException。

Float and Double

以下轉換可應用于 float、Float、double 和 Double。

為 Byte、Short、Integer 和 Long 定義的所有標志都適用。

如果給出了“#”標志,那么小數(shù)分隔符將始終存在。

如果沒有給出標志,則默認格式如下:

  • 輸出在寬度內右對齊
  • 負數(shù)以“-”開頭
  • 正數(shù)和正零不包括符號或額外的前導空格
  • 不包括分組分隔符
  • 小數(shù)分隔符僅在后面有數(shù)字時才會出現(xiàn)

寬度是要寫入輸出的最小字符數(shù)。這包括任何符號、數(shù)字、分組分隔符、小數(shù)分隔符、指數(shù)符號、基數(shù)指示符、括號以及表示無窮大和 NaN 的字符串(如果適用)。如果轉換后的值的長度小于寬度,則輸出將用空格 ('\u0020') 填充,直到字符總數(shù)等于寬度。默認情況下,填充位于左側。如果給出“-”標志,則填充將在右側。如果未指定寬度,則沒有最小值。

如果轉換為“e”、“E”或“f”,則精度為小數(shù)分隔符后的位數(shù)。如果未指定精度,則假定為 6。

如果轉換為“g”或“G”,則精度是舍入后所得幅度中有效數(shù)字的總數(shù)。如果未指定精度,則默認值為 6。如果精度為 0,則取為 1。

如果轉換為“a”或“A”,則精度為小數(shù)點后的十六進制位數(shù)。如果未提供精度,則將輸出 Double#toHexString(double) 返回的所有數(shù)字。

BigDecimal

以下轉換可能適用于 BigDecimal。

為 Byte、Short、Integer 和 Long 定義的所有標志都適用。

如果給出了“#”標志,那么小數(shù)分隔符將始終存在。

沒有給出標志時的默認行為與 Float 和 Double 相同。

寬度和精度的規(guī)格與 Float 和 Double 的定義相同。

Date/Time

此轉換可應用于 long、Long、Calendar、Date 和 TemporalAccessor

為“t”和“T”轉換定義了以下日期和時間轉換字符后綴。這些類型與 GNU date 和 POSIX strftime(3c) 定義的類型相似但不完全相同。提供了其他轉換類型來訪問特定于 Java 的功能(例如,“L”表示秒內的毫秒)。

以下轉換字符用于格式化時間:

以下轉換字符用于格式化日期:

以下轉換字符用于格式化常見的日期/時間組合。

為常規(guī)轉換定義的“-”標志適用。如果給出了 '#' 標志,則將拋出 FormatFlagsConversionMismatchException。

寬度是要寫入輸出的最小字符數(shù)。如果轉換后的值的長度小于寬度,則輸出將用空格 ('\u0020') 填充,直到字符總數(shù)等于寬度。默認情況下,填充位于左側。如果給出“-”標志,則填充將在右側。如果未指定寬度,則沒有最小值。

精度不適用。如果指定了精度,則會拋出 IllegalFormatPrecisionException。

Percent

轉換不對應于任何參數(shù)。

Line Separator

轉換不對應于任何參數(shù)。

標志、寬度和精度不適用。 如果提供了任何一個 IllegalFormatFlagsException、IllegalFormatWidthException 和 IllegalFormatPrecisionException,將分別拋出。

Argument Index

格式說明符可以通過三種方式引用參數(shù):

  • 當格式說明符包含參數(shù)索引時,使用顯式索引。 參數(shù)索引是一個十進制整數(shù),指示參數(shù)在參數(shù)列表中的位置。 第一個參數(shù)由“1$”引用,第二個由“2$”引用,依此類推。一個參數(shù)可能被引用多次。

例如:

     formatter.format("%4$s %3$s %2$s %1$s %4$s %3$s %2$s %1$s",
                      "a", "b", "c", "d")
     // -> "d c b a d c b a"

  • 當格式說明符包含'<' ('\u003c') 標志時使用相對索引,這會導致前一個格式說明符的參數(shù)被重新使用。 如果沒有先前的參數(shù),則拋出 MissingFormatArgumentException。

      formatter.format("%s %s %<s %<s", "a", "b", "c", "d")
      // -> "a b b b"
      // "c" and "d" are ignored because they are not referenced

  • 當格式說明符既不包含參數(shù)索引也不包含“<”標志時,使用普通索引。 每個使用普通索引的格式說明符都被分配到參數(shù)列表中的順序隱式索引,該索引獨立于顯式或相對索引使用的索引。

     formatter.format("%s %s %s %s", "a", "b", "c", "d")
     // -> "a b c d"

可以有一個格式字符串使用所有形式的索引,例如:

   formatter.format("%2$s %s %<s %s", "a", "b", "c", "d")
   // -> "b a a b"
   // "c" and "d" are ignored because they are not referenced

參數(shù)的最大數(shù)量受《Java? 虛擬機規(guī)范》中定義的 Java 數(shù)組的最大維度限制。 如果參數(shù)索引與可用參數(shù)不對應,則拋出 MissingFormatArgumentException。

如果參數(shù)多于格式說明符,則忽略多余的參數(shù)。

除非另有說明,否則將 null 參數(shù)傳遞給此類中的任何方法或構造函數(shù)將導致拋出 NullPointerException。

嵌套類摘要

修飾符和類型 描述
static class Formatter.BigDecimalLayoutForm BigDecimal 格式的枚舉。

構造函數(shù)摘要

構造函數(shù) 描述
Formatter() 構造一個新的格式化程序。
Formatter(File file) 用指定的文件構造一個新的格式化程序。
Formatter(File file, String csn) 使用指定的文件和字符集構造一個新的格式化程序。
Formatter(File file, String csn, Locale l) 使用指定的文件、字符集和語言環(huán)境構造一個新的格式化程序。
Formatter(OutputStream os) 使用指定的輸出流構造一個新的格式化程序。
Formatter(OutputStream os, String csn) 使用指定的輸出流和字符集構造一個新的格式化程序。
Formatter(OutputStream os, String csn, Locale l) 使用指定的輸出流、字符集和語言環(huán)境構造一個新的格式化程序。
Formatter(PrintStream ps) 使用指定的打印流構造一個新的格式化程序。
Formatter(Appendable a) 構造具有指定目標的新格式化程序。
Formatter(Appendable a, Locale l) 構造具有指定目標和語言環(huán)境的新格式化程序。
Formatter(String fileName) 構造具有指定文件名的新格式化程序。
Formatter(String fileName, String csn) 使用指定的文件名和字符集構造一個新的格式化程序。
Formatter(String fileName, String csn, Locale l) 使用指定的文件名、字符集和語言環(huán)境構造一個新的格式化程序。
Formatter(Locale l) 構造具有指定語言環(huán)境的新格式化程序。

方法總結

修飾符和類型 方法 描述
void close() 關閉此格式化程序。
void flush() 刷新此格式化程序。
Formatter format(String format, Object... args) 使用指定的格式字符串和參數(shù)將格式化字符串寫入此對象的目標。
Formatter format(Locale l, String format, Object... args) 使用指定的語言環(huán)境、格式字符串和參數(shù)將格式化字符串寫入此對象的目標。
IOException ioException() 返回此格式化程序的 Appendable 上次拋出的 IOException。
Locale locale() 返回由構造此格式化程序設置的語言環(huán)境。
Appendable out() 返回輸出的目的地。
String toString() 返回在輸出目標上調用 toString() 的結果。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

構造函數(shù)詳細信息

Formatter

public Formatter()

構造一個新的格式化程序。

格式化輸出的目的地是一個 StringBuilder,可以通過調用 out() 來檢索它,并且可以通過調用 toString() 將其當前內容轉換為字符串。 對于此 Java 虛擬機實例,使用的語言環(huán)境是 Locale.Category#FORMAT 的 Locale#getDefault(Locale.Category)。

Formatter

public Formatter(Appendable a)

構造具有指定目標的新格式化程序。

對于此 Java 虛擬機實例,使用的語言環(huán)境是 Locale.Category#FORMAT 的 Locale#getDefault(Locale.Category)。

參數(shù):

參數(shù)名稱 參數(shù)描述
a 格式化輸出的目的地。 如果 a 為 null,則將創(chuàng)建一個 StringBuilder。

Formatter

public Formatter(Locale l)

構造具有指定語言環(huán)境的新格式化程序。

格式化輸出的目的地是一個 StringBuilder,可以通過調用 out() 來檢索它,并且可以通過調用 toString() 將其當前內容轉換為字符串。

參數(shù):

參數(shù)名稱 參數(shù)描述
l 在格式化期間應用的語言環(huán)境。 如果 l 為空,則不應用本地化。

Formatter

public Formatter(Appendable a, Locale l)

構造具有指定目標和語言環(huán)境的新格式化程序。

參數(shù):

參數(shù)名稱 參數(shù)描述
a 格式化輸出的目的地。 如果 a 為 null,則將創(chuàng)建一個 StringBuilder。
l 在格式化期間應用的語言環(huán)境。 如果 l 為空,則不應用本地化。

Formatter

public Formatter(String fileName) throws FileNotFoundException

構造具有指定文件名的新格式化程序。

使用的字符集是此 Java 虛擬機實例的默認字符集。

對于此 Java 虛擬機實例,使用的語言環(huán)境是 Locale.Category#FORMAT 的 Locale#getDefault(Locale.Category)。

參數(shù):

參數(shù)名稱 參數(shù)描述
fileName 用作此格式化程序目標的文件的名稱。 如果文件存在,那么它將被截斷為零大小; 否則,將創(chuàng)建一個新文件。 輸出將被寫入文件并被緩沖。

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且 SecurityManager#checkWrite 拒絕對文件的寫訪問權限
FileNotFoundException 如果給定的文件名不表示現(xiàn)有的可寫常規(guī)文件并且無法創(chuàng)建該名稱的新常規(guī)文件,或者在打開或創(chuàng)建文件時出現(xiàn)其他錯誤

Formatter

public Formatter(String fileName, String csn) throws FileNotFoundException, UnsupportedEncodingException

使用指定的文件名和字符集構造一個新的格式化程序。

對于此 Java 虛擬機實例,使用的語言環(huán)境是 Locale.Category#FORMAT 的 Locale#getDefault(Locale.Category)。

參數(shù):

參數(shù)名稱 參數(shù)描述
fileName 用作此格式化程序目標的文件的名稱。 如果文件存在,那么它將被截斷為零大??; 否則,將創(chuàng)建一個新文件。 輸出將被寫入文件并被緩沖。
csn 支持的字符集的名稱

Throws:

Throw名稱 Throw描述
FileNotFoundException 如果給定的文件名不表示現(xiàn)有的可寫常規(guī)文件并且無法創(chuàng)建該名稱的新常規(guī)文件,或者在打開或創(chuàng)建文件時出現(xiàn)其他錯誤
SecurityException 如果存在安全管理器并且 SecurityManager#checkWrite 拒絕對文件的寫訪問權限
UnsupportedEncodingException 如果不支持命名字符集

Formatter

public Formatter(String fileName, String csn, Locale l) throws FileNotFoundException, UnsupportedEncodingException

使用指定的文件名、字符集和語言環(huán)境構造一個新的格式化程序。

參數(shù):

參數(shù)名稱 參數(shù)描述
fileName 用作此格式化程序目標的文件的名稱。 如果文件存在,那么它將被截斷為零大?。?nbsp;否則,將創(chuàng)建一個新文件。 輸出將被寫入文件并被緩沖。
csn 支持的字符集的名稱
l 在格式化期間應用的語言環(huán)境。 如果 l 為空,則不應用本地化。

Throws:

Throw名稱 Throw描述
FileNotFoundException 如果給定的文件名不表示現(xiàn)有的可寫常規(guī)文件并且無法創(chuàng)建該名稱的新常規(guī)文件,或者在打開或創(chuàng)建文件時出現(xiàn)其他錯誤
SecurityException 如果存在安全管理器并且 SecurityManager#checkWrite 拒絕對文件的寫訪問權限
UnsupportedEncodingException 如果不支持命名字符集

Formatter

public Formatter(File file) throws FileNotFoundException

用指定的文件構造一個新的格式化程序。

使用的字符集是此 Java 虛擬機實例的默認字符集。

對于此 Java 虛擬機實例,使用的語言環(huán)境是 Locale.Category#FORMAT 的 Locale#getDefault(Locale.Category)。

參數(shù):

參數(shù)名稱 參數(shù)描述
file 用作此格式化程序目標的文件。 如果文件存在,那么它將被截斷為零大??; 否則,將創(chuàng)建一個新文件。 輸出將被寫入文件并被緩沖。

Throws:

Throw名稱 Throw描述
SecurityException 如果存在安全管理器并且 SecurityManager#checkWrite 拒絕對文件的寫訪問權限
FileNotFoundException 如果給定的文件對象不表示現(xiàn)有的可寫常規(guī)文件并且無法創(chuàng)建該名稱的新常規(guī)文件,或者在打開或創(chuàng)建文件時發(fā)生其他錯誤

Formatter

public Formatter(File file, String csn) throws FileNotFoundException, UnsupportedEncodingException

使用指定的文件和字符集構造一個新的格式化程序。

對于此 Java 虛擬機實例,使用的語言環(huán)境是 Locale.Category#FORMAT 的 Locale#getDefault(Locale.Category)。

參數(shù):

參數(shù)名稱 參數(shù)描述
file 用作此格式化程序目標的文件。 如果文件存在,那么它將被截斷為零大?。?nbsp;否則,將創(chuàng)建一個新文件。 輸出將被寫入文件并被緩沖。
csn 支持的字符集的名稱

Throws:

Throw名稱 Throw描述
FileNotFoundException 如果給定的文件對象不表示現(xiàn)有的可寫常規(guī)文件并且無法創(chuàng)建該名稱的新常規(guī)文件,或者在打開或創(chuàng)建文件時發(fā)生其他錯誤
SecurityException 如果存在安全管理器并且 SecurityManager#checkWrite 拒絕對文件的寫訪問權限
UnsupportedEncodingException 如果不支持命名字符集

Formatter

public Formatter(File file, String csn, Locale l) throws FileNotFoundException, UnsupportedEncodingException

使用指定的文件、字符集和語言環(huán)境構造一個新的格式化程序。

參數(shù):

參數(shù)名稱 參數(shù)描述
file 用作此格式化程序目標的文件。 如果文件存在,那么它將被截斷為零大?。?nbsp;否則,將創(chuàng)建一個新文件。 輸出將被寫入文件并被緩沖。
csn 支持的字符集的名稱
l 在格式化期間應用的語言環(huán)境。 如果 l 為空,則不應用本地化。

Throws:

Throw名稱 Throw描述
FileNotFoundException 如果給定的文件對象不表示現(xiàn)有的可寫常規(guī)文件并且無法創(chuàng)建該名稱的新常規(guī)文件,或者在打開或創(chuàng)建文件時發(fā)生其他錯誤
SecurityException 如果存在安全管理器并且 SecurityManager#checkWrite 拒絕對文件的寫訪問權限
UnsupportedEncodingException 如果不支持命名字符集

Formatter

public Formatter(PrintStream ps)

使用指定的打印流構造一個新的格式化程序。

對于此 Java 虛擬機實例,使用的語言環(huán)境是 Locale.Category#FORMAT 的 Locale#getDefault(Locale.Category)。

字符被寫入給定的 PrintStream 對象,因此使用該對象的字符集進行編碼。

參數(shù):

參數(shù)名稱 參數(shù)描述
ps 用作此格式化程序目標的流。

Formatter

public Formatter(OutputStream os)

使用指定的輸出流構造一個新的格式化程序。

使用的字符集是此 Java 虛擬機實例的默認字符集。

對于此 Java 虛擬機實例,使用的語言環(huán)境是 Locale.Category#FORMAT 的 Locale#getDefault(Locale.Category)。

參數(shù):

參數(shù)名稱 參數(shù)描述
os 用作此格式化程序目標的輸出流。 輸出將被緩沖。

Formatter

public Formatter(OutputStream os, String csn) throws UnsupportedEncodingException

使用指定的輸出流和字符集構造一個新的格式化程序。

對于此 Java 虛擬機實例,使用的語言環(huán)境是 Locale.Category#FORMAT 的 Locale#getDefault(Locale.Category)。

參數(shù):

參數(shù)名稱 參數(shù)描述
os 用作此格式化程序目標的輸出流。 輸出將被緩沖。
csn 支持的字符集的名稱

Throws:

Throw名稱 Throw描述
UnsupportedEncodingException 如果不支持命名字符集

Formatter

public Formatter(OutputStream os, String csn, Locale l) throws UnsupportedEncodingException

使用指定的輸出流、字符集和語言環(huán)境構造一個新的格式化程序。

參數(shù):

參數(shù)名稱 參數(shù)描述
os 用作此格式化程序目標的輸出流。 輸出將被緩沖。
csn 支持的字符集的名稱
l 在格式化期間應用的語言環(huán)境。 如果 l 為空,則不應用本地化。

Throws:

Throw名稱 Throw描述
UnsupportedEncodingException 如果不支持命名字符集

方法詳情

locale

public Locale locale()

返回由構造此格式化程序設置的語言環(huán)境。

此對象的具有語言環(huán)境參數(shù)的格式方法不會更改此值。

返回:

如果未應用本地化,則為 null,否則為語言環(huán)境

Throws:

Throw名稱 Throw描述
FormatterClosedException 如果此格式化程序已通過調用其 close() 方法關閉

out

public Appendable out()

返回輸出的目的地。

返回:

輸出的目的地

Throws:

Throw名稱 Throw描述
FormatterClosedException 如果此格式化程序已通過調用其 close() 方法關閉

toString

public String toString()

返回在輸出目標上調用 toString() 的結果。 例如,以下代碼將文本格式化為 StringBuilder,然后檢索結果字符串:

   Formatter f = new Formatter();
   f.format("Last reboot at %tc", lastRebootDate);
   String s = f.toString();
   // -> s == "Last reboot at Sat Jan 01 00:00:00 PST 2000"

此方法的調用與調用的行為方式完全相同

     out().toString() 

根據(jù) Appendable 的 toString 規(guī)范,返回的字符串可能包含也可能不包含寫入目標的字符。 例如,緩沖區(qū)通常在 toString() 中返回其內容,但流不能,因為數(shù)據(jù)被丟棄。

覆蓋:

類 Object 中的 toString

返回:

在輸出目標上調用 toString() 的結果

Throws:

Throw名稱 Throw描述
FormatterClosedException 如果此格式化程序已通過調用其 close() 方法關閉

flush

public void flush()

刷新此格式化程序。 如果目標實現(xiàn)了 Flushable 接口,則會調用其 flush 方法。

刷新格式化程序會將目標中的任何緩沖輸出寫入底層流。

指定者:

在接口 Flushable 中刷新

Throws:

Throw名稱 Throw描述
FormatterClosedException 如果此格式化程序已通過調用其 close() 方法關閉

close

public void close()

關閉此格式化程序。 如果目標實現(xiàn)了 Closeable 接口,則將調用其 close 方法。

關閉格式化程序允許它釋放它可能持有的資源(例如打開的文件)。 如果格式化程序已經(jīng)關閉,則調用此方法無效。

在此格式化程序關閉后嘗試調用除 ioException() 之外的任何方法將導致 FormatterClosedException。

指定者:

在接口 AutoCloseable 中關閉

指定者:

在接口Closeable中關閉

ioException

public IOException ioException()

返回此格式化程序的 Appendable 上次拋出的 IOException。

如果目標的 append() 方法從不拋出 IOException,則此方法將始終返回 null。

返回:

Appendable 拋出的最后一個異常,如果不存在此類異常,則返回 null。

format

public Formatter format(String format, Object... args)

使用指定的格式字符串和參數(shù)將格式化字符串寫入此對象的目標。 使用的語言環(huán)境是在構造此格式化程序期間定義的語言環(huán)境。

參數(shù):

參數(shù)名稱 參數(shù)描述
format 格式字符串語法中描述的格式字符串。
args 格式字符串中的格式說明符引用的參數(shù)。 如果參數(shù)多于格式說明符,則忽略多余的參數(shù)。 參數(shù)的最大數(shù)量受《Java? 虛擬機規(guī)范》中定義的 Java 數(shù)組的最大維度限制。

返回:

這個格式化程序

Throws:

Throw名稱 Throw描述
IllegalFormatException 如果格式字符串包含非法語法、與給定參數(shù)不兼容的格式說明符、給定格式字符串的參數(shù)不足或其他非法條件。
FormatterClosedException 如果此格式化程序已通過調用其 close() 方法關閉

format

public Formatter format(Locale l, String format, Object... args)

使用指定的語言環(huán)境、格式字符串和參數(shù)將格式化字符串寫入此對象的目標。

參數(shù):

參數(shù)名稱 參數(shù)描述
l 在格式化期間應用的語言環(huán)境。 如果 l 為空,則不應用本地化。 這不會更改在構造期間設置的此對象的語言環(huán)境。
format 格式字符串語法中描述的格式字符串
args 格式字符串中的格式說明符引用的參數(shù)。 如果參數(shù)多于格式說明符,則忽略多余的參數(shù)。 參數(shù)的最大數(shù)量受《Java? 虛擬機規(guī)范》中定義的 Java 數(shù)組的最大維度限制。

返回:

這個格式化程序

Throws:

Throw名稱 Throw描述
IllegalFormatException 如果格式字符串包含非法語法、與給定參數(shù)不兼容的格式說明符、給定格式字符串的參數(shù)不足或其他非法條件。
FormatterClosedException 如果此格式化程序已通過調用其 close() 方法關閉
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號