title: Updating a file in Amazon S3 bucket
body: <p>I am trying to append a string to the end of a text file stored in S3.
  Currently I just read the contents of the file into a String,  append my new text and resave the file back to S3.
  Is there a better way to do this.  I am thinkinig when the file is >>> 10MB then reading the entire file would not be a good idea so how should I do this correctly?</p>
  
  <p>Current code
  [code]</p>
  
  <pre><code>private void saveNoteToFile( String p_note ) throws IOException, ServletException    
  {
      String str_infoFileName =  "myfile.json"; 
  
      String existingNotes = s3Helper.getfileContentFromS3( str_infoFileName  ); 
      existingNotes += p_note;
      writeStringToS3( str_infoFileName , existingNotes );        
  }
  
  public void writeStringToS3(String p_fileName, String p_data) throws IOException 
  {
    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream( p_data.getBytes());
  
    try {
        streamFileToS3bucket(  p_fileName, byteArrayInputStream, p_data.getBytes().length);
    } 
    catch (AmazonServiceException e)
    {
        e.printStackTrace();
    } catch (AmazonClientException e)
    {
        e.printStackTrace();
    }
  }
  
  public void streamFileToS3bucket( String p_fileName,  InputStream input, long size)
  {
      //Create sub folders if there is any in the file name.
      p_fileName = p_fileName.replace("\\", "/");
      if( p_fileName.charAt(0) == '/')
      {
          p_fileName = p_fileName.substring(1, p_fileName.length());
      }
      String folder = getFolderName( p_fileName );
      if( folder.length() &gt; 0)
      {
          if( !doesFolderExist(folder))
          {
              createFolder( folder );
          }
      }
      ObjectMetadata metadata =  new ObjectMetadata();
      metadata.setContentLength(size);
      AccessControlList acl = new AccessControlList();
      acl.grantPermission(GroupGrantee.AllUsers, Permission.Read);
  
      s3Client.putObject(new PutObjectRequest(bucket, p_fileName , input,metadata).withAccessControlList(acl));
  }
  </code></pre>
  
  <p>[/code]</p>