2013-10-23 39 views
2

我已经使用RandomAccessFile创建了一个具有预分配大小的文件。但是当我使用FileOutputStream来写入文件时,它正在改变文件的大小。有没有什么办法阻止这种使用FileOutputStreamFileOutputStream将文件大小减小到0

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(); 
     } 

     } 

    } 
+3

提示:阅读fileou的Javadoc tputstream并查看可用的构造函数。 –

回答

2

看起来像你的文件大小的改变,因为你开上创建模式文件,所以以前的内容丢失

fileOutput = new FileOutputStream(f); 

尝试打开你的文件在append模式下,使用一个额外的boolean标志,同时构建您的FileOutputStream

fileOutput = new FileOutputStream(f, true); 
+0

谢谢,但我不想追加,有没有什么办法可以避免追加 – Avinash

+0

如果我做这样的事情,那么它工作{{{RandomAccessFile raFile = new RandomAccessFile(f.getAbsolutePath(),“rw”); fileOutput = new FileOutputStream(raFile.getFD());}}} – Avinash