[ https://issues.apache.org/jira/browse/VFS-443?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13496550#comment-13496550
]
Nicholas Allen commented on VFS-443:
------------------------------------
I added Junit tests to check that conversion works to some utility functions and they fail
using the method that was suggested.
Here are my unit tests:
{code:title=FileUtilityTests.java|borderStyle=solid}
@Test
public void testFileObjectConversion()
{
testFileObjectConversion(new File("hello.txt"));
testFileObjectConversion(new File("hello there.txt"));
testFileObjectConversion(new File("hello!?%#.txt"));
}
private void testFileObjectConversion(final File file)
{
final FileObject fileObject = FileUtilities.getFileObject(file);
final File localFile = FileUtilities.getLocalFile(fileObject);
Assert.assertTrue(localFile != null);
Assert.assertEquals(file.getAbsoluteFile(), localFile);
}
{code}
And here are the functions that are tested:
{code:title=FileUtilities.java|borderStyle=solid}
/** Converts a {@link File} to a {@link FileObject}. */
public static FileObject getFileObject(final File file)
{
try
{
final File absoluteFile = file.getAbsoluteFile();
final FileObject fileObject = VFS.getManager().toFileObject(absoluteFile);
assert fileObject != null;
assert absoluteFile.equals(getLocalFile(fileObject));
return fileObject;
}
catch (final FileSystemException e)
{
throw new IllegalStateException(e);
}
}
/**
* If the supplied {@link FileObject} represents a local file then this returns that, otherwise
* returns null.
*/
public static File getLocalFile(final FileObject fileObject)
{
if (fileObject instanceof LocalFile)
{
try
{
return new File(fileObject.getURL().getPath());
}
catch (final FileSystemException e)
{
throw new IllegalStateException(e);
}
}
return null;
}
{code}
> Need an easy way to convert from a FileObject to a File
> -------------------------------------------------------
>
> Key: VFS-443
> URL: https://issues.apache.org/jira/browse/VFS-443
> Project: Commons VFS
> Issue Type: Bug
> Affects Versions: 2.0
> Reporter: Nicholas Allen
> Fix For: 2.1
>
>
> I've seen the reasons why Apache does not want to provide an easy way to convert from
a FileObject to a java.io.File and those reasons make sense - however, I think that some things
are being overlooked and there are still valid reasons for needing to convert from a FileObject
to a File.
> Firstly, I would like to always use Apache VFS for everything I do - even if I know it's
only on the local file system. The reasons for this are:
> 1. it makes the code more flexible (it might start of being local file system and then
as specs change it could become a requirement to work over http or inside zip files for example).
> 2. The API is nicer to use than the java.io.File and it's easier to write cross platform
code using it (file separator is always "/" etc).
> So if I work with Apache VFS for local file system use I would like to be able to get
back to a java.io.File in case I need to interface with same other library. I would like a
method that converted to a File or null if not possible. This would allow me to take an alternate
action (eg copy file to local temp file if it's not already a local file). There's no need
to copy the file if it is already local.
> The simplest fix for this is to just make the getLocalFile() method in LocalFile public.
Once the user knows it's a LocalFile object it makes sense to call this method to obtain the
java.io.File. So I could write a method like this:
> /**
> * If the supplied {@link FileObject} represents a local file then this returns that,
otherwise
> * returns null.
> */
> public File getLocalFile(final FileObject fileObject)
> {
> if (fileObject instanceof LocalFile)
> {
> final LocalFile localFile = (LocalFile)fileObject;
> return localFile.getLocalFile();
> }
> return null;
> }
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
|