You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "L (Jira)" <ji...@apache.org> on 2021/07/30 09:49:00 UTC
[jira] [Created] (VFS-807) LocalFile migration to NIO is not done
correctly
L created VFS-807:
---------------------
Summary: LocalFile migration to NIO is not done correctly
Key: VFS-807
URL: https://issues.apache.org/jira/browse/VFS-807
Project: Commons VFS
Issue Type: Bug
Affects Versions: 2.9.0
Reporter: L
Attachments: TestJdkWriteFile.java
According to release notes ([https://archive.apache.org/dist/commons/vfs/RELEASE-NOTES.txt),] version 2.9.0 includes the following change:
Replace construction of FileInputStream and FileOutputStream objects with Files NIO APIs. #164. Thanks to Arturo Bernal.
Strangely, it was not completed: LocalFlie.java has the following now, even in master:
{code:java}
/**
* Creates an input stream to read the content from.
*/
@Override
protected InputStream doGetInputStream(final int bufferSize) throws Exception {
return new FileInputStream(file);
}
{code}
But what is worse, doGetOutputStream is *completely* broken:
{code:java}
/**
* Creates an output stream to write the file content to.
*/
@Override
protected OutputStream doGetOutputStream(final boolean bAppend) throws Exception {
return Files.newOutputStream(file.toPath(), bAppend ? StandardOpenOption.APPEND : StandardOpenOption.CREATE);
} {code}
This can be demonstrated with a small java program, see attachment. The program just tries to write to a local file (into the same directory), using different ways to do it:
# Java IO, how it was done before VFS 2.9.0
# Java NIO the way VFS 2.9.0 does it
# Java NIO the way it must be done
What is important, the program also verifies the result.
VFS 2.9.0 fails in 2 cases:
# When the file does not exist and append must be performed: java.nio.file.NoSuchFileException is thrown in this case.
# When the file exists and no append must be performed: the file is not truncated, so whatever is written overwrites the beginning of the file, keeping the rest.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)