Writing to hidden android files

I am trying to copy files from a "normal" directory to one of the
weird hidden android directories (sort of com.embarcadero.PeteA.files.tmp),
using the System.IOUtils.GetHomePath or GetTempPath.  I am doing something
wrong in my transfer routine, getting garbage in the output file
 and would appreciate comments please.

procedure tPeteAShowTrackBitsForm.CopyFileToTemp(fp : Juri; Home, FileName : string);
var
   JFileReader : JInputStream;
   JBuffer :  TJavaArray<Byte>;
   Transferred : integer;
   f : file;
begin
   JBuffer :=  TJavaArray<Byte>.Create(2048);
   JFileReader := TAndroidHelper.Context.getContentResolver.openInputStream(fp);

   home := System.IOUtils.tPath.GetTempPath + '/';
   AssignFile(f, home + FileName);
   ReWrite(f);

   while true do
   begin
      Transferred := JFileReader.Read(JBuffer);
      if Transferred <= 0 then break;  // -1 means EOF
      BlockWrite(f, JBuffer.data^, Transferred);
   end;

   CloseFile(f);
   JFileReader.close;
end;


I tried changing it by putting in another (Delphi) buffer and copying it byte by byte:

  for i := 0 to Transferred - 1 do Buffer[i] := JBuffer[i];
  BlockWrite(f, Buffer, transferred);

but now get a “Disk Full” error on the first transfer, though there is buckets of free disc space.