OSDN Git Service

8de50603b53c6626c7049610db80aa832865388a
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / corelib / WinFile.java
1 /*\r
2  * Windows File utils\r
3  *\r
4  * License : The MIT License\r
5  * Copyright(c) 2010 MikuToga Partners\r
6  */\r
7 \r
8 package jp.sourceforge.mikutoga.corelib;\r
9 \r
10 /**\r
11  * Windowsに特化したFileユーティリティ。\r
12  */\r
13 public final class WinFile {\r
14 \r
15     public static final char SEPARATOR_CHAR = '\\';  // \\r
16     public static final String SEPARATOR =\r
17             Character.toString(SEPARATOR_CHAR);\r
18     public static final String PFX_UNC =\r
19             SEPARATOR + SEPARATOR;                   // \\\r
20 \r
21     static{\r
22         assert '\\' == 0x005c;\r
23     }\r
24 \r
25     /**\r
26      * 隠しコンストラクタ。\r
27      */\r
28     private WinFile(){\r
29         assert false;\r
30         throw new AssertionError();\r
31     }\r
32 \r
33     /**\r
34      * Windowsファイル名の正規化を行う。\r
35      * UNCも考慮される。\r
36      * 相対パスは相対パスのまま。\r
37      * <ul>\r
38      * <li>頭の3回以上連続する\記号は2個の\記号に置き換えられる。\r
39      * <li>末尾の1回以上連続する\記号は削除。\r
40      * ただし頭から連続している場合は削除しない。\r
41      * <li>2回以上連続する\記号は1個の\記号にまとめられる。\r
42      * ただし頭から連続している場合はまとめない。\r
43      * </ul>\r
44      * @param seq 対象ファイル名\r
45      * @return 正規化されたファイル名\r
46      */\r
47     public static String normalizeWinFileName(CharSequence seq){\r
48         String text = seq.toString();\r
49         text = text.replaceAll("^\\\\{3,}", "\\\\\\\\");\r
50         text = text.replaceAll("(.*[^\\\\])\\\\+$", "$1");\r
51         text = text.replaceAll("([^\\\\])\\\\{2,}", "$1\\\\");\r
52         return text;\r
53     }\r
54 \r
55 }\r