У меня странная ситуация, когда я хочу выполнить тест на введенное пользователем значение имени файла в 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?
Введенное значение "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();
}
Этот метод принимает аргумент File
и возвращает String
с относительным путем, если выбранный файл находится в подкаталоге current
папки. Если нет, он вернет абсолютный путь к данному файлу. Поэтому этот метод не будет возвращать относительные пути, такие как ../../dir/subdir/file.txt
.
Это решение имеет большое сходство с этим ответом.