FileOutputStream将文件大小减小为0

时间:2013-10-23 13:10:28

标签: java

我使用预先分配的大小RandomAccessFile创建了一个文件。但是当我使用FileOutputStream写入相同内容时,它正在改变文件的大小。有没有办法使用FileOutputStream

来阻止这种情况
   import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectOutputStream;
    import java.io.RandomAccessFile;
    import java.io.Serializable;

    public class testFileSize {

      public static class Status implements Serializable {

      }

      public static void preAllocate(String path, long maxSize, boolean preAllocate)
          throws IOException {
        RandomAccessFile raf = new RandomAccessFile(path, "rw");
        try {
          raf.setLength(maxSize);
        } finally {
          raf.close();
        }
      }

      /**
       * @param args
       * @throws IOException 
       */
      public static void main(String[] args) throws IOException {
        FileOutputStream fileOutput = null;
        ObjectOutputStream objectOutput = null;
        try {
          final File f = new File("/tmp/test.bin");      
          preBlow(f.getAbsolutePath(), 2048, false);
          Status s = new Status();
          fileOutput = new FileOutputStream(f);
          objectOutput = new ObjectOutputStream(fileOutput);
          objectOutput.writeObject(new Status());
          objectOutput.flush();

        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } finally {
          objectOutput.close();
          fileOutput.close();
        }

      }

    }

1 个答案:

答案 0 :(得分:2)

看起来您的文件正在改变大小,因为您在创建模式下打开文件,因此以前的内容丢失了

fileOutput = new FileOutputStream(f);

尝试在append模式下打开文件,在构建FileOutputStream时使用额外的boolean标记

fileOutput = new FileOutputStream(f, true);