如何将对象附加到现有文件(泛型)?

时间:2014-04-17 06:59:47

标签: java file object generics append

我在现有文件中附加通用对象时遇到问题。如果参数是" true"该方法应该将对象附加到现有文件。如果" false"则覆盖整个文件。 " false"语句工作得非常好,它会覆盖整个文件,但我似乎无法使其附加工作。乍一看似乎什么也没做,但是当我放置一个简单的System.out.println时(" test");在while(true)循环中,它会永远运行。我该如何解决这个问题?

public <T> void writeOneObject(T type, boolean append) throws NotSerializableException{

    if (append == true){
        //TODO
        if (file.exists ()){
            ObjectOutputStream ois = null;
            try{
                ois = new ObjectOutputStream (new FileOutputStream (file, true));
                while (true){
                   ois.writeObject(type);
                }
            }catch (StreamCorruptedException e){
            }catch (EOFException e){

            }catch (Exception e){
                e.printStackTrace ();
            }finally{
                try{
                    if (ois != null) ois.close();
                }catch (StreamCorruptedException e){
                }catch (IOException e){
                    e.printStackTrace ();
                }
            }
        }


    }
    else {  //overwrites the entire file
        try {
        FileOutputStream fos = new FileOutputStream(file);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(type);
            oos.flush();
            oos.close();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }   catch (StreamCorruptedException e) {
            System.out.println("error");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

}

我在课堂上也有这个:

class NoHeaderObjectOutputStream extends ObjectOutputStream {
      public NoHeaderObjectOutputStream(OutputStream os) throws IOException {
        super(os);
      }
      protected void writeStreamHeader() {}
    }

0 个答案:

没有答案