2012-04-07 5 views
1

のJavaのFileOutputStreamに格納されている1つのオブジェクトを削除しますは、どのように私は、ファイルにオブジェクトを保存するために、このコードを使用している

try{ 
     FileOutputStream saveFile=new FileOutputStream("SaveObj.sav"); 


     ObjectOutputStream save = new ObjectOutputStream(saveFile); 

     save.writeObject(x); 

     save.close(); 
    } 
    catch(Exception exc){ 
     exc.printStackTrace(); 
    } 
    } 
} 

は、どのように単一のオブジェクトを削除?? ファイルをクリアするには?

答えて

1

まあ、ファイルを空にすることは非常に簡単です - ちょうど執筆のためにそれを開き、それを再び閉じる:

new FileOutputStream("SaveObj.sav").close(); 

それを空にします。しかし、多くのオブジェクトの中から1つのオブジェクトを消去しようとしていた場合、それははるかに複雑です。すべてのオブジェクトを読み込み、保持したいオブジェクトだけを書き出すか、各オブジェクトが開始するファイルオフセットのインデックスを保持する必要があります代わりにオブジェクトデータベースを使用することを検討したいと考えています。

1

アーネストは、オブジェクトストリームから特定のオブジェクトの除去がわずかに複雑であるという権利です。また、ファイルを空にする場合は、ファイルを開いて閉じるだけでファイルを閉じることができます。しかし、それをファイルシステムから削除したい場合は、Fileオブジェクトを使用してください(例外と戻り値を正しく処理することを忘れないでください)。次の例は完璧ではないかもしれませんが、純粋なJavaで目標を達成する方法についてのヒントを与えるはずです。この情報がお役に立てば幸い...

 

package test; 

import java.io.EOFException; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.OutputStream; 
import java.util.ArrayList; 
import java.util.List; 


public class Main { 

    public static void main(String[] args) throws Exception { 
    String filename = "object.serialized"; 
    { 
     List objects = new ArrayList(); 
     objects.add("String1"); 
     objects.add("String2"); 
     objects.add("String3"); 
     writeObjectsToFile(filename, objects); 
    } 

    { 
     List objects = readObjectsFromFile(filename); 
     objects.remove(1); 
     writeObjectsToFile(filename, objects); 
    } 

    { 
     List objects = readObjectsFromFile(filename); 
     for (Object object : objects) { 
     System.out.println(object); 
     } 
    } 

    emptyFile(filename); 
    deleteFile(filename); 
    } 

    private static void emptyFile(String filename) throws IOException { 
    OutputStream os = null; 
    try { 
     os = new FileOutputStream(filename); 
    } finally { 
     if (os != null) { 
     os.close(); 
     } 
    } 
    } 

    private static void deleteFile(String filename) { 
    File f = new File(filename); 
    if (f.delete()) { 
     System.out.println(filename + " deleted sucessfully..."); 
    } else { 
     System.out.println(filename + " deletion failed!"); 
    } 
    } 

    private static void writeObjectsToFile(String filename, List objects) throws IOException { 
    OutputStream os = null; 
    try { 
     os = new FileOutputStream(filename); 
     ObjectOutputStream oos = new ObjectOutputStream(os); 
     for (Object object : objects) { 
     oos.writeObject(object); 
     } 
     oos.flush(); 
    } finally { 
     if (os != null) { 
     os.close(); 
     } 
    } 
    } 

    private static List readObjectsFromFile(String filename) throws IOException, ClassNotFoundException { 
    List objects = new ArrayList(); 
    InputStream is = null; 
    try { 
     is = new FileInputStream(filename); 
     ObjectInputStream ois = new ObjectInputStream(is); 
     while (true) { 
     try { 
      Object object = ois.readObject(); 
      objects.add(object); 
     } catch (EOFException ex) { 
      break; 
     } 
     } 
    } finally { 
     if (is != null) { 
     is.close(); 
     } 
    } 
    return objects; 
    } 

} 
 

出力:私はこの主題から長い時間があったけど、ただ未来来て人々を助けるために

 

String1 
String3 
object.serialized deleted sucessfully... 
 
+0

ありがとう – AndreaF

0

、どのような私の作品は、オブジェクトを書くことでした再びヌル値として:

public static void writeIncidentsObjectsInCache(Object object) throws IOException { 
    writeObject(INCIDENTS_CACHE, object); } 

public static Object readIncidentsObjectFromCache() throws IOException, 
     ClassNotFoundException { 
    return readObject(INCIDENTS_CACHE); } 

public static void clearIncidents() throws IOException, ClassNotFoundException { 
    writeIncidentsObjectsInCache(null); } 

public static void writeObject(String key, Object object) throws IOException { 
    FileOutputStream fos = TheAAApp.getApp().openFileOutput(key, Context.MODE_PRIVATE); 
    ObjectOutputStream oos = new ObjectOutputStream(fos); 
    oos.writeObject(object); 
    oos.close(); 
    fos.close(); 
} 

public static Object readObject(String key) throws IOException, 
     ClassNotFoundException { 
    FileInputStream fis = TheAAApp.getApp().openFileInput(key); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    Object object = ois.readObject(); 
    return object; 
} 
関連する問題