Как получить желаемую подстроку из строки в java или jsf? - PullRequest
1 голос
/ 01 марта 2010

Я разрабатываю приложение с использованием JSF в Eclipse IDE с Derby в качестве базы данных. У меня есть возможность загружать файлы в базу данных. Но имя файла сохраняется как «C: \ Documents and Settings \ Angeline \ Desktop \ test.txt» вместо «test.txt». Как заставить хранить только «test.txt» как имя файла в базе данных?

Это мой код в JSF:

 File to Upload:

<t:inputFileUpload id="fileupload" value="#{employeeBean.upFile}" storage="file"/>

Java Bean Code:

* +1007 *

Значение этого имени файла = C: \ Documents and Settings \ Angeline \ Desktop \ test.txt.

Ответы [ 4 ]

2 голосов
/ 01 марта 2010

Томагавк t:inputFileUpload построен поверх Apache Commons FileUpload и Apache Commons IO . В FAQ по FileUpload вы можете найти запись под названием «Почему FileItem.getName () возвращает весь путь, а не только имя файла?» , который содержит следующий ответ:

Internet Explorer предоставляет полный путь к загружаемому файлу, а не только базовое имя файла. Поскольку FileUpload предоставляет именно то, что было предоставлено клиентом (браузером), вы можете удалить эту информацию о пути в вашем приложении. Вы можете сделать это, используя следующий метод из Commons IO (который у вас уже есть, так как он используется FileUpload).

String fileName = item.getName();
if (fileName != null) {
    filename = FilenameUtils.getName(filename);
}

Короче, просто используйте FilenameUtils#getName(), чтобы избавиться от полного пути, который был излишне добавлен MSIE (все другие реальные / обычные веб-браузеры не добавляют полный путь на стороне клиента, а просто предоставляют единственное имя файла как согласно спецификациям HTML-форм).

Итак, все, что вам в основном нужно сделать, это заменить

String fileName = upFile.getName();

по

String fileName = FilenameUtils.getName(upFile.getName());
2 голосов
/ 01 марта 2010
lastSlashIndex = name.lastIndexOf("\\");
if (lastSlashIndex == -1) {
    lastSlashIndex = name.lastIndexOf("/"); //unix client
}
String shortName = name;
if (lastSlashIndex != -1) {
    shortName = name.substring(lastSlashIndex);
}

Обратите внимание, что если имя файла * nix содержит \, это не сработает.

2 голосов
/ 01 марта 2010

new java.io.File(myPath).getName();

Вероятно, вы могли бы сделать что-то более эффективное, используя только строковые операции, но в зависимости от загрузки приложения и других операций это может не стоить.

0 голосов
/ 01 марта 2010

Я думаю, что было бы безопаснее рассматривать это не как проблему манипуляции со строками, а как проблему разбора пути:

String filename = new File(pathname).getName()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...