我有一个奇怪的情况,我想对jfilechooser中文件名的用户输入值执行测试。
.getSelectedFile()函数基于用户输入的文件名值和目录返回一个文件,这不是我想要的。
举个例子:jfilechooser中的当前目录可能是"c:ac"用户输入的值可能是"def.txt"
.getselectedfile()返回"c:acdef.txt".getselectedfile().getname()返回"f.txt"
但是我希望像.getinpuntedFile()这样的东西返回"def.txt"
有没有这样的解决方案,或者我需要扩展jFileChooser?
这是因为我们希望用户能够输入一个文件名,例如:server1dirxx.dat server2xx.dat,如果我们检测到他们手动输入了这些名称(而不是某个目录刚好是这个名称),我们将使用它作为"绝对路径",并以我们自己的方式处理它。
输入值"def.txt"是相对路径。.getSelectedFile()返回"c:acdef.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();
}
此方法接受File参数,如果所选文件位于current文件夹的子目录中,则返回带有相对路径的String。否则,它将返回给定文件的绝对路径。所以这个方法不会返回像../../dir/subdir/file.txt这样的相对路径。
这个解决方案与这个答案有很大的相似之处。