Получить введенное пользователем имя файла из JFileChooser

1

У меня странная ситуация, когда я хочу выполнить тест на введенное пользователем значение имени файла в 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?

  • 0
    Причина этого заключается в том, что мы хотим, чтобы пользователь мог ввести имя файла, например: server1 \ dir \ xx.dat server2 \ xx.dat, где, если мы обнаружим, что они вручную ввели эти имена (в отличие от каталога, который происходит с иметь такое имя), мы бы использовали его как «абсолютный путь» и обрабатывать его по-своему.
Теги:
filenames
swing
jfilechooser

2 ответа

1

Введенное значение "d\e\f.txt" является относительным путем. Логично, что.getSelectedFile() возвращает "C:\a\b\c\d\e\f.txt", потому что указанный путь добавляется к текущему каталогу. Если вы укажете абсолютный путь, он наверняка не будет конкатенирован.

  • 0
    Я знаю это. Я спрашиваю, есть ли способ просто получить то, что ввел пользователь.
  • 1
    Это не имеет смысла. Селектор файлов всегда должен возвращать абсолютный путь к выбранному файлу. Что вводит пользователь, это не так важно. И абсолютного пути к файлу должно быть достаточно для вас.
0

Насколько мне известно, нет никакой возможности построить относительный путь из выбранного файла (но я мог ошибаться).

Но вы можете помочь себе, создав такой метод:

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.

Это решение имеет большое сходство с этим ответом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню