Задача:
С помощью 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;UP ну а вообще можно сделать гораздо проще =) :
import java.io.File;
public class LocalFileHelper
{
public static File getFile(LocalFile file)
{
return file.getLocalFile();
}
}
public class LocalFileHelperи тут уже все равно, в каком пакете наш хелпер.
{
public static File getFile(LocalFile file)
{
new File(file.getName().getURI().replaceFirst("^file:///", ""));
}
}
Комментариев нет:
Отправить комментарий