實現文件名的格式化
今天在項目上遇到一個問題,關於標準輸出文件名,
mLine3View.setText(tmp);
<span style="white-space:pre"> </span>int dotIndex = info.mFileName.lastIndexOf(".");
if (dotIndex != -1) {
<span style="white-space:pre"> </span>String extension = info.mFileName.substring(dotIndex + 1).toLowerCase();
MimeTypeMap map = MimeTypeMap.getSingleton();
String extType = map.getMimeTypeFromExtension(extension);
if (extType != null && !extType.isEmpty()) {
info.mFileType = extType;
}
}
這裏通過Mime這個方法可以得到文件的類型,比如是png ,gif,jpg 等格式的文件會被判定爲圖片輸出 “image/png”Formatter
簡介
使用舉例
- %[argument_index$][flags][width][.precision]conversion
字段 | 說明 |
argument_index | 需要將參數列表中第幾個參數進行格式化 |
flags |
一些特殊的格式,比如‘-’代表向左對齊 |
width |
輸出的最小的寬度,適用於所有的參數類型 |
[.precision] |
參數爲String,則表示打印String輸出字符的最大數量;參數爲float,則表示小數點最大位數。不使用於int |
conversion |
接受的參數類型,如s代表後面接String類型的參數;d代表接int型的參數 |
3. convention詳細說明 ( 這個和C語言裏面的標準輸出類似)
'b','B' | 常規 | 如果參數 arg 爲 null,則結果爲 "false"。如果arg 是一個 boolean 值或 Boolean,則結果爲 String.valueof( ) 返回的字符串。否則結果爲 "true"。 |
'h','H' | 常規 | 如果參數 arg 爲 null,則結果爲 "null"。否則,結果爲調用Integer.toHexString(arg.hashCode()) 得到的結果。 |
's','S' | 常規 | 如果參數 arg 爲 null,則結果爲 "null"。如果arg 實現 Formattable,則調用arg.formatTo。否則,結果爲調用arg.toString() 得到的結果。 |
'c','C' | 字符 | 結果是一個 Unicode 字符 |
'd' | 整數 | 結果被格式化爲十進制整數 |
'o' | 整數 | 結果被格式化爲八進制整數 |
'x','X' | 整數 | 結果被格式化爲十六進制整數 |
'e','E' | 浮點 | 結果被格式化爲用計算機科學記數法表示的十進制數 |
'f' | 浮點 | 結果被格式化爲十進制數 |
'g','G' | 浮點 | 根據精度和舍入運算後的值,使用計算機科學記數形式或十進制格式對結果進行格式化。 |
'a','A' | 浮點 | 結果被格式化爲帶有效位數和指數的十六進制浮點數 |
't','T' | 日期/時間 | 日期和時間轉換字符的前綴。參考下面內容。 |
'%' | 百分比 | 結果爲字面值 '%' ('\u0025') |
'n' | 行分隔符 | 結果爲特定於平臺的行分隔符 |
任何未明確定義爲轉換的字符都是非法字符,並且都被保留,以供將來擴展使用。
日期和時間
以下日期和時間轉換的後綴字符是爲 't' 和 'T' 轉換定義的。這些類型相似於但不完全等同於那些由 GNUdate 和 POSIX strftime(3c) 定義的類型。提供其他轉換類型是爲了訪問特定於 Java 的功能(如將 'L' 用作秒中的毫秒)。
以下轉換字符用來格式化時間:
'H' | 24 小時制的小時,被格式化爲必要時帶前導零的兩位數,即 00 - 23。 |
'I' | 12 小時制的小時,被格式化爲必要時帶前導零的兩位數,即 01 - 12。 |
'k' | 24 小時制的小時,即 0 - 23。 |
'l' | 12 小時制的小時,即 1 - 12。 |
'M' | 小時中的分鐘,被格式化爲必要時帶前導零的兩位數,即 00 - 59。 |
'S' | 分鐘中的秒,被格式化爲必要時帶前導零的兩位數,即 00 - 60 ("60" 是支持閏秒所需的一個特殊值)。 |
'L' | 秒中的毫秒,被格式化爲必要時帶前導零的三位數,即 000 - 999。 |
'N' | 秒中的毫微秒,被格式化爲必要時帶前導零的九位數,即 000000000 - 999999999。 |
'p' | 特定於語言環境的上午/下午 標記以小寫形式表示,例如 "am" 或 "pm"。使用轉換前綴'T' 可以強行將此輸出轉換爲大寫形式。 |
'z' | 相對於 GMT 的FRC 822 格式的數字時區偏移量,例如 -0800。 |
'Z' | 表示時區縮寫形式的字符串。Formatter 的語言環境將取代參數的語言環境(如果有)。 |
's' | 自協調世界時 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的秒數,即Long.MIN_VALUE/1000 與 Long.MAX_VALUE/1000 之間的差值。 |
'Q' | 自協調世界時 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的毫秒數,即Long.MIN_VALUE 與 Long.MAX_VALUE 之間的差值。 |
以下轉換字符用來格式化日期:
'B' | 特定於語言環境的完整月份,例如 "January" 和 "February"。 |
'b' | 特定於語言環境的月份,例如 "Jan" 和 "Feb"。 |
'h' | 與 'b' 相同。 |
'A' | 特定於語言環境的星期幾全稱,例如 "Sunday" 和 "Monday" |
'a' | 特定於語言環境的星期幾簡稱,例如 "Sun" 和 "Mon" |
'C' | 除以 100 的四位數表示的年份,被格式化爲必要時帶前導零的兩位數,即 00 - 99 |
'Y' | 年份,被格式化爲必要時帶前導零的四位數(至少),例如,0092 等於格里高利曆的92 CE。 |
'y' | 年份的最後兩位數,被格式化爲必要時帶前導零的兩位數,即 00 - 99。 |
'j' | 一年中的天數,被格式化爲必要時帶前導零的三位數,例如,對於格里高利曆是 001 - 366。 |
'm' | 月份,被格式化爲必要時帶前導零的兩位數,即 01 - 13。 |
'd' | 一個月中的天數,被格式化爲必要時帶前導零兩位數,即 01 - 31 |
'e' | 一個月中的天數,被格式化爲兩位數,即 1 - 31。 |
以下轉換字符用於格式化常見的日期/時間組合。
'R' | 24 小時制的時間,被格式化爲 "%tH:%tM" |
'T' | 24 小時制的時間,被格式化爲 "%tH:%tM:%tS"。 |
'r' | 12 小時制的時間,被格式化爲 "%tI:%tM:%tS %Tp"。上午或下午標記 ('%Tp') 的位置可能與語言環境有關。 |
'D' | 日期,被格式化爲 "%tm/%td/%ty"。 |
'F' | 格式的完整日期,被格式化爲"%tY-%tm-%td"。 |
'c' | 日期和時間,被格式化爲 "%ta %tb %td %tT %tZ %tY",例如"Sun Jul 20 16:17:00 EDT 1969"。 |
2.flag詳細說明
下表總結了受支持的標誌。y 表示該標誌受指示參數類型支持。
標誌 | 常規 | 字符 | 整數 | 浮點 | 日期/時間 | 說明 |
---|---|---|---|---|---|---|
'-' | y | y | y | y | y | 結果將是左對齊的。 |
'#' | y1 | - | y3 | y | - | 結果應該使用依賴於轉換類型的替換形式 |
'+' | - | - | y4 | y | - | 結果總是包括一個符號 |
' ' | - | - | y4 | y | - | 對於正值,結果中將包括一個前導空格 |
'0' | - | - | y | y | - | 結果將用零來填充 |
',' | - | - | y2 | y5 | - | 結果將包括特定於語言環境的組分隔糊 |
'(' | - | - | y4 | y5 | - | 結果將是用圓括號括起來的負數 |
1 取決於 定義。
2 只適用於 'd' 轉換。
3 只適用於 'o'、'x' 和 'X' 轉換。
4 對 BigInteger 應用 'd'、'o'、'x' 和 'X' 轉換時,或者對byte 及 Byte、short 及Short、int 及Integer、long 及Long 分別應用 'd' 轉換時適用。
5 只適用於 'e'、'E'、'f'、'g' 和'G' 轉換。
任何未顯式定義爲標誌的字符都是非法字符,並且都被保留,以供擴展使用。