【问题标题】:Get correctly path file from Linux for Java Application从 Linux 为 Java 应用程序获取正确的路径文件
【发布时间】:2012-10-11 15:24:01
【问题描述】:

我有一个 java 应用程序作为 jar,它加密了一些文件,我使用 JFileChooser 获取根路径,它工作正常,根路径内的 2 个目录包含目录,这些目录内有一个要加密的文件,其中一个或多个目录是月份(例如 path/january 或 path/May)。 JFileChooser 只探索 rooh 路径目录,月份目录的名称在应用程序的代码中,我有 12 个月份,月份的第一个单词以大写开头,但是如果我的目录名称是小写的,则应用程序没有识别路径,它适用于 linux OS,在 Windows 中完美运行。有什么建议吗?

【问题讨论】:

  • "有什么建议吗?" 确保程序不必处理与实际文件名相同但大小写不同的文件名。不过,我不太明白您从哪里得到这些问题(不正确的大小写文件名)。
  • 我在 linux 中使用正确的正确路径进行了测试,并且运行良好。 Windows中的目录名称不取决于是小写还是大写,它可以正常工作,在Linux中必须是完全相同的字母。
  • 是的,大多数文件系统都区分大小写。 Windows 不是。
  • @JavaDeveloper 然后处理这两种情况。检查“小写”文件是否存在,如果不存在,则检查“大写”文件。我看不出问题出在哪里?
  • 1) 当你开始将字母 'i' 扔进 'December' 时,这与大小写无关(注意 3 e's,no i)。 2) 究竟是什么在制作这些目录?您不能指望对所有 12 个月中每一个拼写错误的情况都进行解释。 3)您可以通过描述导致这种情况的情况,工作流程来帮助我们帮助您。思考你的应用是没有意义的。可以猜出可能存在哪些类似于月份名称的目录名称。 4) 看File.listFiles()

标签: java windows linux filesystems case-sensitive


【解决方案1】:

尽我所能,您可以使用equalsIgnoreCase 完成您想要的操作。这是基于您的 sn-p 的粗伪代码。

// ...
final String FEBRERO ="Febrero";
// ...

if(actualDirectorio.isDirectory()){ 
    ficheros = actualDirectorio.listFiles(); 
    for (File file : ficheros) {
        if (file.isDirectory()) {
            // proceed to check if it is one of the month names
            // ..
            if (file.getName().equalsIgnoreCase(FEBRERO)) {
                // process Files in Febrero OR FEBRERO or febrero OR FeBrErO ..
            } else if ..
        }
    }
}

最好将接受目录的条件封装为在FileFilter 中表示一个月,可以与listFiles() 的重载变体一起使用。不含电池。

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多