首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换ZipOutputStream中的文件

替换ZipOutputStream中的文件
EN

Stack Overflow用户
提问于 2012-07-24 03:46:16
回答 1查看 1.5K关注 0票数 0

我想创建压缩文件。文件将包含导出的PreferencesSerializable对象。但是当我尝试替换zip存档中的对象时,保存的首选项消失了。如何解决这个问题?

代码语言:javascript
复制
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.prefs.BackingStoreException;
import java.util.prefs.InvalidPreferencesFormatException;
import java.util.prefs.Preferences;
import java.util.zip.Deflater;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class ToZip {

    /**
     * @param args
     */
    static Preferences exportPrefs = Preferences
            .userNodeForPackage(ToZip.class);

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        exportPrefs.put("Val", "MyVal");

        writeFile();
        readFile();
        System.out.println("Value:" + exportPrefs.get("Val", ""));

        // And Try replace object
        writeObject();
        readObject();
    }

    private static void writeFile() {

        String str = "ABCD";

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("/home/user/profile.prof");
            BufferedOutputStream boS = new BufferedOutputStream(fos);
            ZipOutputStream zoS = new ZipOutputStream(boS);
            ObjectOutputStream ooS = null;

            zoS.setMethod(ZipOutputStream.DEFLATED);
            zoS.setLevel(Deflater.BEST_COMPRESSION);

            zoS.putNextEntry(new ZipEntry("Object"));

            ooS = new ObjectOutputStream(zoS);
            ooS.writeObject(str);

            zoS.putNextEntry(new ZipEntry("Profile"));
            exportPrefs.exportSubtree(zoS);

            try {
                ooS.close();
            } catch (NullPointerException ex) {
            }

            zoS.close();
            fos.close();
            boS.close();
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (BackingStoreException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

    }

    private static void readFile() {

        FileInputStream fiN;
        try {
            fiN = new FileInputStream("/home/user/profile.prof");
            ZipInputStream ziS = new ZipInputStream(fiN);

            ziS.getNextEntry();

            ObjectInputStream oiS = new ObjectInputStream(ziS);
            System.out.println("Read String " + oiS.readObject());

            ziS.getNextEntry();

            exportPrefs.importPreferences(ziS);

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvalidPreferencesFormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    private static void writeObject() {// replace serialize object

        String str2 = "XYZ";

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("/home/user/profile.prof");
            BufferedOutputStream boS = new BufferedOutputStream(fos);
            ZipOutputStream zoS = new ZipOutputStream(boS);
            ObjectOutputStream ooS = null;

            zoS.setMethod(ZipOutputStream.DEFLATED);
            zoS.setLevel(Deflater.BEST_COMPRESSION);

            zoS.putNextEntry(new ZipEntry("Object"));

            ooS = new ObjectOutputStream(zoS);
            ooS.writeObject(str2);

            try {
                ooS.close();
            } catch (NullPointerException ex) {
            }

            zoS.close();
            fos.close();
            boS.close();
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

    }

    private static void readObject() {

        FileInputStream fiN;
        try {
            fiN = new FileInputStream("/home/user/profile.prof");
            ZipInputStream ziS = new ZipInputStream(fiN);
            ziS.getNextEntry();

            ObjectInputStream oiS = new ObjectInputStream(ziS);
            System.out.println("Read String " + oiS.readObject());

            oiS.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-24 04:08:12

您似乎没有在writeObject()中导出首选项,也没有在readObject()方法中读取它们。

writeObject()中,您遗漏了:

代码语言:javascript
复制
        exportPrefs.exportSubtree(zoS);

而且你没有在你的readObject()里读到它们

代码语言:javascript
复制
        exportPrefs.importPreferences(ziS);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11619427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档