【问题标题】:How to get a desired substring form a String in java or jsf?如何从 java 或 jsf 中的字符串中获取所需的子字符串?
【发布时间】:2010-03-01 09:53:27
【问题描述】:

我正在使用 Eclipse IDE 中的 JSF 开发一个应用程序,并将 Derby 作为数据库。我有将文件上传到数据库的功能。但是文件名被存储为“C:\Documents and Settings\Angeline\Desktop\test.txt”而不是“test.txt”。如何在数据库中只存储“test.txt”作为文件名?

这是我在 JSF 中的代码:

 File to Upload:

<t:inputFileUpload id="fileupload" value="#{employeeBean.upFile}" storage="file"/>

Java Bean 代码:

 String fileName=upFile.getName();

这个文件的值Name=C:\Documents and Settings\Angeline\Desktop\test.txt。

【问题讨论】:

    标签: java string jsf


    【解决方案1】:
    lastSlashIndex = name.lastIndexOf("\\");
    if (lastSlashIndex == -1) {
        lastSlashIndex = name.lastIndexOf("/"); //unix client
    }
    String shortName = name;
    if (lastSlashIndex != -1) {
        shortName = name.substring(lastSlashIndex);
    }
    

    请注意,如果 *nix 上的文件名包含 \,这将不起作用。

    【讨论】:

    • 我会在 substring 调用之前检查 lastSlashIndex
    • 如果您在 *NIX 上并且文件名中有反斜杠怎么办?
    • 我不认为 *NIX 用户运行 MSIE。
    【解决方案2】:

    new java.io.File(myPath).getName();

    您可能只使用字符串操作来做一些更有效的事情,但取决于应用程序负载和其他操作,这可能不值得。

    【讨论】:

    • 我不确定如果客户端是 Linux 而服务器是 Windows 会发生什么。我的意思是:路径是来自客户端的操作系统,而不是服务器。
    • 这行不通。至少 Sun 的 JRE 不是,因为它使用 FileSystem.getSeparator()
    【解决方案3】:

    战斧t:inputFileUpload 建立在Apache Commons FileUploadApache Commons IO 之上。在 FileUpload 常见问题解答中,您可以找到标题为 "Why does FileItem.getName() return the whole path, and not just the file name? " 的条目,其中包含以下答案:

    Internet Explorer 提供上传文件的完整路径,而不仅仅是基本文件名。由于 FileUpload 提供的正是客户端(浏览器)提供的内容,因此您可能希望在应用程序中删除此路径信息。您可以使用 Commons IO 中的以下方法(您已经拥有,因为 FileUpload 使用它)来做到这一点。

    String fileName = item.getName();
    if (fileName != null) {
        filename = FilenameUtils.getName(filename);
    }
    

    简而言之,只需使用FilenameUtils#getName() 删除 MSIE 不必要地附加的完整路径(所有其他真实/正常的网络浏览器都不会添加完整的客户端路径,而只是提供唯一的文件名作为根据 HTML 表单规范)。

    所以,你基本上需要做的就是替换

    String fileName = upFile.getName();
    

    通过

    String fileName = FilenameUtils.getName(upFile.getName());
    

    【讨论】:

      【解决方案4】:

      我认为不将其视为字符串操作问题,而是将其视为路径名解析问题会更安全:

      String filename = new File(pathname).getName()
      

      【讨论】:

        猜你喜欢
        • 2017-10-16
        • 2013-06-15
        • 2013-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多