barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

пятница, 23 ноября 2012 г.

Commons VFS: получения доступа к оригинальному объекту File для LocalFile

Задача:

С помощью Commons VFS в приложении получается объект FileObject. Точно известно, что он представляет собой локальный файл (т.е. представлен имплементацией org.apache.commons.vfs2.provider.local.LocalFile). Нужно получить обычный джавовский объект File для этого файла.

Решение:

Если посмотреть в документацию по VFS, то можно увидеть, что класс LocalFile имеет метод getLocalFile(), возвращающий нужный нам File. Незадача заключается в том, что этот метод - защищенный (вообще я заметил, что в большинстве Open Source проектов самые нужные методы постоянно оказываются protected или вообще private). Наследоваться от LocalFile и делать метод публичным смысла не имеет - ведь файл приходит к нам именно в виде LocalFile. Однако, в Java защищенные члены видны не только наследникам, но и всем классам того же пакета, т.е. нам ничего не мешает создать некий Helper-класс, разместить его в пакете org.apache.commons.vfs2.provider.local.LocalFile, и этим классом сделать нужный нам метод доступным:

package org.apache.commons.vfs2.provider.local;
import java.io.File;
public class LocalFileHelper
{
    public static File getFile(LocalFile file)
    {
      return file.getLocalFile();
    }
}
UP ну а вообще можно сделать гораздо проще =)  :
public class LocalFileHelper
{
    public static File getFile(LocalFile file)
    {
    new File(file.getName().getURI().replaceFirst("^file:///", ""));
    }
}
и тут уже все равно, в каком пакете наш хелпер.

Комментариев нет:

Отправить комментарий