首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Windows上验证文件名

在Windows上验证文件名
EN

Stack Overflow用户
提问于 2011-07-18 15:51:45
回答 6查看 31.9K关注 0票数 55
代码语言:javascript
运行
复制
public static boolean isValidName(String text)
{
    Pattern pattern = Pattern.compile("^[^/./\\:*?\"<>|]+$");
    Matcher matcher = pattern.matcher(text);
    boolean isMatch = matcher.matches();
    return isMatch;
}

此方法是否保证Windows上的文件名有效?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-07-24 11:26:14

考虑到前面的cited MSDN documentation中指定的要求,下面的正则表达式应该可以做得很好:

代码语言:javascript
运行
复制
public static boolean isValidName(String text)
{
    Pattern pattern = Pattern.compile(
        "# Match a valid Windows filename (unspecified file system).          \n" +
        "^                                # Anchor to start of string.        \n" +
        "(?!                              # Assert filename is not: CON, PRN, \n" +
        "  (?:                            # AUX, NUL, COM1, COM2, COM3, COM4, \n" +
        "    CON|PRN|AUX|NUL|             # COM5, COM6, COM7, COM8, COM9,     \n" +
        "    COM[1-9]|LPT[1-9]            # LPT1, LPT2, LPT3, LPT4, LPT5,     \n" +
        "  )                              # LPT6, LPT7, LPT8, and LPT9...     \n" +
        "  (?:\\.[^.]*)?                  # followed by optional extension    \n" +
        "  $                              # and end of string                 \n" +
        ")                                # End negative lookahead assertion. \n" +
        "[^<>:\"/\\\\|?*\\x00-\\x1F]*     # Zero or more valid filename chars.\n" +
        "[^<>:\"/\\\\|?*\\x00-\\x1F\\ .]  # Last char is not a space or dot.  \n" +
        "$                                # Anchor to end of string.            ", 
        Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.COMMENTS);
    Matcher matcher = pattern.matcher(text);
    boolean isMatch = matcher.matches();
    return isMatch;
}

请注意,此正则表达式不会对文件名的长度施加任何限制,但根据平台的不同,实际的文件名可能会被限制为260或32767个字符。

票数 91
EN

Stack Overflow用户

发布于 2011-07-18 17:11:24

好吧,我认为下面的方法可以保证一个有效的文件名:

代码语言:javascript
运行
复制
public static boolean isValidName(String text)
{
    try
    {
        File file = new File(text);
        file.createNewFile();
        if(file.exists()) file.delete();
        return true;
    }
    catch(Exception ex){}
    return false;
}

你认为如何?

票数 16
EN

Stack Overflow用户

发布于 2011-07-26 00:36:27

发布一个新的答案,因为我没有对Eng.Fuad的代码进行评论的代表阈值

代码语言:javascript
运行
复制
public static boolean isValidName(String text)
{
    try
    {
        File file = new File(text);
        if(file.createNewFile()) file.delete();
        return true;
    }
    catch(Exception ex){}
    return false;
}

对您的答案所做的小更改,以防止删除预先存在的文件。只有在此方法调用期间创建的文件才会被删除,而返回值是相同的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6730009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档