2014-11-21 5 views
1

У меня странная ситуация, когда я хочу выполнить тест на введенное пользователем значение имени файла в JFileChooser.Получить имя пользователя от имени пользователя JFileChooser

Функция .getSelectedFile() возвращает файл на основе как введенного пользователем имени файла, так и каталога, который не является тем, что я хочу.

В качестве примера: Текущий каталог в JFileChooser может быть "C: \ A \ B \ с" Пользователь вводится значение может быть "д \ е \ f.txt"

.getSelectedFile () возвращает "C: \ а \ Ь \ с \ d \ е \ f.txt". .getSelectedFile() GetName() возвращает "f.txt"

в то время как я хочу что-то вроде .getInputtedFile(), чтобы вернуться "d \ e \ f.txt"

Есть ли доступное решение, подобное этому, или мне нужно будет расширить JFileChooser?

+0

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

ответ

1

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

+0

Я это знаю. Я спрашиваю, есть ли способ получить то, что вводил пользователь. – Wassa

+1

Это не имело бы смысла. Выбор файла всегда должен возвращать абсолютный путь к выбранному файлу. Что вводит пользователь, это не так важно. И абсолютного пути к файлу должно быть достаточно для вас. – grozandrei

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. Если нет, он вернет абсолютный путь к данному файлу. Таким образом, этот метод не будет возвращать относительные пути, такие как .

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

Смежные вопросы