2013-10-23 112 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