Search code examples
javasocketsfileoutputstream

FileOutputStream Deletes Contents of File


Hi Im trying to send data over the network using FileOutputStream. Whenever the FileOutputStream is created using the file linked it deleted all the data found as if it's replacing the old file with a new one.

Can someone please help? Here's the code.

File videoFile = new File (Current_video_file);

log.info(videoFile.toString());

InputStream is = null; 
OutputStream outS = null;

try{
    is = socket.getInputStream();
} catch (IOException e){
    e.printStackTrace();
}

try{
    outS = new FileOutputStream(videoFile);
} catch (IOException e){
    e.printStackTrace();
}

byte [] videoLength = new byte [16*1024];

log.info("About to send");
int count; 
while((count = is.read(videoLength)) > 0){
    log.info("Sending Message");
    outS.write(videoLength, 0, count);
}

log.info("Data Sent");

outS.close();
is.close();

Solution

  • The JavaDoc says the following

    /**
     * Creates a file output stream to write to the file represented by 
     * the specified <code>File</code> object. If the second argument is
     * <code>true</code>, then bytes will be written to the end of the file
     * rather than the beginning. A new <code>FileDescriptor</code> object is
     * created to represent this file connection.
     * <p>
     * First, if there is a security manager, its <code>checkWrite</code> 
     * method is called with the path represented by the <code>file</code> 
     * argument as its argument.
     * <p>
     * If the file exists but is a directory rather than a regular file, does
     * not exist but cannot be created, or cannot be opened for any other
     * reason then a <code>FileNotFoundException</code> is thrown.
     *
     * @param      file               the file to be opened for writing.
     * @param     append      if <code>true</code>, then bytes will be written
     *                   to the end of the file rather than the beginning
     * @exception  FileNotFoundException  if the file exists but is a directory
     *                   rather than a regular file, does not exist but cannot
     *                   be created, or cannot be opened for any other reason
     * @exception  SecurityException  if a security manager exists and its
     *               <code>checkWrite</code> method denies write access
     *               to the file.
     * @see        java.io.File#getPath()
     * @see        java.lang.SecurityException
     * @see        java.lang.SecurityManager#checkWrite(java.lang.String)
     * @since 1.4
     */
    public FileOutputStream(File file, boolean append)
    

    Thus to use it you should add a boolean to the constructor of your FileOutputStream, True to append or False to overwrite

    So your code should look like this:

    Boolean append = true;
    outS = new FileOutputStream(videoFile, append);