【问题标题】:Get user inputted file name from JFileChooser从 JFileChooser 获取用户输入的文件名
【发布时间】:2014-11-21 13:02:45
【问题描述】:

我有一个奇怪的情况,我想对用户在 JFileChooser 中输入的文件名值执行测试。

.getSelectedFile() 函数根据用户输入的文件名值和不是我想要的目录返回一个文件。

例如: JFileChooser 中的当前目录可能是“C:\a\b\c” 用户输入的值可能是“d\e\f.txt”

.getSelectedFile() 返回 "C:\a\b\c\d\e\f.txt" .getSelectedFile().getName() 返回“f.txt”

而我希望 .getInputtedFile() 之类的东西返回“d\e\f.txt”

是否有这样的可用解决方案,或者我是否必须扩展 JFileChooser?

【问题讨论】:

  • 这是因为我们希望用户能够输入文件名,例如:server1\dir\xx.dat server2\xx.dat 如果我们检测到他们手动输入了这些名称(与碰巧同名的目录相反)我们会将其用作“绝对路径”并以自己的方式处理。

标签: java swing filenames jfilechooser


【解决方案1】:

输入的值“d\e\f.txt”是一个相对路径。 .getSelectedFile() 返回“C:\a\b\c\d\e\f.txt”是逻辑,因为指定的路径附加到当前目录。如果指定绝对路径,肯定不会串接。

【讨论】:

  • 我知道。我在问是否有办法获取用户输入的内容。
  • 这毫无意义。文件选择器应始终返回所选文件的绝对路径。用户输入什么,并不那么重要。并且绝对文件路径对您来说应该足够了。
【解决方案2】:

据我所知,没有内置方法可以从选定的文件中检索相对路径(但我可能是错的)。

但是您可以通过创建这样的方法来帮助自己:

public static String getRelativeSubdirectory(final File file) {
    final File currentFolder = new File("");
    if (file.getAbsolutePath().startsWith(currentFolder.getAbsolutePath())) {
        return file.getAbsolutePath().substring(currentFolder.getAbsolutePath().length() + 1);
    }
    return file.getAbsolutePath();
}

如果所选文件位于current 文件夹的子目录中,此方法接受File 参数并返回带有相对路径的String。如果不是,它将返回给定文件的绝对路径。所以这个方法不会返回像../../dir/subdir/file.txt这样的相对路径。

这个解决方案与这个answer有很大的相似之处。

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多