Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从JFileChooser获取用户输入的文件名_Java_Swing_Filenames_Jfilechooser - Fatal编程技术网

Java 从JFileChooser获取用户输入的文件名

Java 从JFileChooser获取用户输入的文件名,java,swing,filenames,jfilechooser,Java,Swing,Filenames,Jfilechooser,我有一个奇怪的情况,我想在JFileChooser中对用户输入的文件名值执行测试 .getSelectedFile()函数根据用户输入的文件名值和目录返回一个文件,这不是我想要的 例如: JFileChooser中的当前目录可能是“C:\a\b\C” 用户输入的值可能是“d\e\f.txt” .getSelectedFile()返回“C:\a\b\C\d\e\f.txt” .getSelectedFile().getName()返回“f.txt” 而我希望.getInputedFile()之类的

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

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

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

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

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


有这样的解决方案吗,或者我必须扩展JFileChooser吗?

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

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

但您可以通过创建如下方法来帮助自己:

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();
}
如果所选文件位于当前文件夹的子目录中,此方法接受一个
文件
参数,并返回一个带有相对路径的
字符串。否则,它将返回给定文件的绝对路径。因此,此方法不会返回相对路径,如
。/../dir/subdir/file.txt


此解决方案与此有许多相似之处。

我知道这一点。我在问,是否有办法只获取用户输入的内容。这毫无意义。文件选择器应始终返回所选文件的绝对路径。用户输入的内容并不重要。绝对文件路径对您来说应该足够了。这样做的原因是我们希望用户能够输入一个文件名,例如:server1\dir\xx.dat server2\xx.dat,如果我们检测到他们手动输入这些名称(而不是恰好是该名称的目录),我们将使用该文件名作为“绝对路径”我们自己处理。