当前位置: 代码迷 >> Eclipse >> java 将目前的窗体对象压缩成zip文件
  详细解决方案

java 将目前的窗体对象压缩成zip文件

热度:129   发布时间:2016-04-22 23:50:33.0
java 将当前的窗体对象压缩成zip文件
功能要求:
    创建一个名为“测试用的窗体”的空白窗体。程序运行后自动打开该窗体,用户在该窗体中输入一些英文,再单击“选择文件夹”按钮,程序自动打开文件选择器,用户选定保存压缩文件的位置,最后单击“序列化”按钮,程序自动将将当前的窗体对象压缩成zip文件。
老师要求我们做一个课程设计是将当前窗体对象压缩成zip文件。有哪位能人会吗?



------解决思路----------------------
主窗体类

/**
 * 
 */
package save_frame;

import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 *
 * @author zys59三仙半(QQ:597882752)<br>
 *         创建时间:2015年6月18日 上午12:34:16
 */
public class MainFrame extends JFrame {
private static final long serialVersionUID = -8086319283480772888L;

private JPanel contentPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainFrame frame = new MainFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

private BeSaveFrame beSaveFrame = null;

// private String filepath = "d:\\saved.frm";

/**
 * Create the frame.
 */
public MainFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 479, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

JButton btnRead = new JButton("读取");
btnRead.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 选择保存窗体的ZIP文件
JFileChooser chooser = new JFileChooser(MainFrame.class
.getResource("").toString());
FileFilter filter = new FileNameExtensionFilter("ZIP文件(*.zip)",
"zip");
chooser.setFileFilter(filter);
int action = chooser.showOpenDialog(MainFrame.this);
if (action != JFileChooser.APPROVE_OPTION) {
return;
}
String StrZipFile = chooser.getSelectedFile().getAbsolutePath();
// 如果有显示中的窗体,则销毁它
if (beSaveFrame != null) {
beSaveFrame.dispose();
}
// 读取ZIP文件
ZipFile zipFile = null;
try {
zipFile = new ZipFile(StrZipFile);
// 读取ZIP文件中的窗体存档文件,并显示
ZipEntry entry = zipFile.getEntry("saved.frm");
if (entry != null) {
InputStream is = zipFile.getInputStream(entry);
ObjectInputStream ois = new ObjectInputStream(is);
beSaveFrame = (BeSaveFrame) (ois.readObject());
beSaveFrame.setLocation(MainFrame.this.getFrameLoc());
beSaveFrame.setVisible(true);
} else {
System.out.println("压缩包中不存在合法的窗体存档文件");
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
if (zipFile != null) {
try {
zipFile.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
});
contentPane.add(btnRead);

JButton btnNew = new JButton("新建");
btnNew.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (beSaveFrame != null) {
beSaveFrame.dispose();
}

beSaveFrame = new BeSaveFrame();
Rectangle bounds = MainFrame.this.getBounds();
int x = bounds.x + bounds.width;
int y = bounds.y;
beSaveFrame.setLocation(x, y);
beSaveFrame.setVisible(true);
}
});
contentPane.add(btnNew);

JButton btnWrite = new JButton("写入");
btnWrite.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (beSaveFrame == null 
------解决思路----------------------
 !beSaveFrame.isVisible()) {
JOptionPane.showMessageDialog(MainFrame.this,
"没有要写入的窗体。", "提示", JOptionPane.INFORMATION_MESSAGE);
return;
}
// 选择目标文件
JFileChooser chooser = new JFileChooser();
chooser.setFileFilter(new FileNameExtensionFilter(
"ZIP文件(*.zip)", "zip"));
int action = chooser.showSaveDialog(MainFrame.this);
if (action != JFileChooser.APPROVE_OPTION) {
return;
}
File file = chooser.getSelectedFile();
ObjectOutputStream oos = null;
try {
// 生成zip输出流
ZipOutputStream zos = new ZipOutputStream(
new FileOutputStream(file));
// 生成新条目
ZipEntry entry = new ZipEntry("saved.frm");
// 将新条目写入输出流
zos.putNextEntry(entry);
// 生成对象输出流
oos = new ObjectOutputStream(zos);
// 将窗体写入输出流
oos.writeObject(beSaveFrame);
// 强制输出到文件
oos.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
if (oos != null) {
try {
oos.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
});
contentPane.add(btnWrite);

pack();
}

private Point getFrameLoc() {
Point point = new Point();
Rectangle bounds = this.getBounds();
point.x = bounds.x + bounds.width;
point.y = bounds.y;
return point;
}
}

被保存的窗体类

import javax.swing.JFrame;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import java.awt.Dimension;

/**
 *
 * @author zys59三仙半(QQ:597882752)<br>
 * 创建时间:2015年6月18日 上午12:38:44
 */
public class BeSaveFrame extends JFrame {
private static final long serialVersionUID = -2943829196452303501L;
private JTextArea taUserMsg;

public BeSaveFrame() {
setSize(new Dimension(400, 300));
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setTitle("要被保存的窗体");
setResizable(false);

getContentPane().setLayout(new BorderLayout(0, 0));

JLabel lblNewLabel = new JLabel("请输入内容:");
getContentPane().add(lblNewLabel, BorderLayout.NORTH);

taUserMsg = new JTextArea();
getContentPane().add(taUserMsg, BorderLayout.CENTER);
}

public JTextArea getTaUserMsg() {
return taUserMsg;
}
}

保存不了中文
  相关解决方案