联系方式: 微信:biyebang QQ: 629001810
随着人们对数据的大量需求以及计算机使用时间的增加,计算机磁盘上的文件越来越大,越来越多。如何让有限的磁盘空间容纳更多的数据成为需要解决的问题。一方面,高速发展的存储技术以提高磁盘容量来解决这样的需求,但随着网络环境下数据传递的产生以及带宽的限制,大容量数据问题日益突出。在这两种需求的推动下,对数据压缩的需求产生了。人们可以将文件在不改变其本身的条件下,将其以更小的占用空间存储,并且在需要的时候将文件恢复成原有的样子,这就是压缩目的。本论文主要研究文件的无损压缩技术,并简要介绍了文件压缩的分类、几种常用的无损压缩格式和常用的压缩算法。运用LZ77字典算法、懒惰匹配算法和Huffman编码算法,使用Java语言在Jbuilder2006环境下设计了使用GZIP算法对文件压缩与解压缩的实现程序。用户可以根据自己的需求,使用此程序方便地对文件进行压缩或者解压缩操作。
文件的压缩与解压缩,要能方便地进行,要完成的功能包括压缩功能,解压缩功能,选择文件路径,选择操作方案,选择新文件保存路径。此程序还要在压缩成功后显示被压缩文件的大小,并对非法操作给出提示。
用户可以选择文件进行压缩或解压缩操作,并选择生成保存路径,默认的保存路径为原文件目录,压缩的生成文件以原文件加.gzip后缀命名,在解压缩操作中,若输入文件不是gzip格式的压缩文件,则提示gzip文件格式不对。
程序的基本设计原则有:方便性原则、功能实用性原则和开放性原则等。程序设计时采用较好的压缩技术,能保证文件压缩的压缩比和可恢复性,确保程序有较长的生命周期。
本程序的总体目标是实现文件压缩与解压缩的便捷操作,因此需要有便捷的操作界面。
4.1 程序界面设计
为了让用户能便捷地进行压缩与解压缩的操作,还要对程序加入一个可视化界面。其外观如图9:
用户首先选择需要操作的文件,若要将被操作文件的生成文件保存到原文件所在目录,可以跳过选择输出文件夹操作。如图10:
在选择好文件以后,用户根据自己的需要,点击压缩或者解压按钮,操作便完成。
其部分代码如下:
public class gzipJFrame extends javax.swing.JFrame implements ActionListener {
File file=null;
File dir=null;
private JToggleButton jToggleButton1;
private JMenu jMenu1;
private JMenuItem jMenuItem1;
private JLabel jLabel2;
private JLabel jLabel1;
private JMenuItem jMenuItem2;
private JMenuBar jMenuBar1;
private JToggleButton jToggleButton2;
private static final String initstate="请先选择文件";
JFileChooser chooserfile=new JFileChooser();
JFileChooser chooserDir=new JFileChooser();
private JMenuItem jMenuItem3;
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
gzipJFrame inst = new gzipJFrame();
inst.setVisible(true);
}
public gzipJFrame() {
super();
initGUI();
}
private void initGUI() {
try {
this.setTitle("gzip压缩与解压缩");
this.setLocation(280,240);
AnchorLayout thisLayout = new AnchorLayout();
getContentPane().setLayout(thisLayout);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
{
jLabel2 = new JLabel();
getContentPane().add(jLabel2, new AnchorConstraint(775, 995, 953, 22, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
jLabel2.setPreferredSize(new java.awt.Dimension(322, 21));
}
{
jLabel1 = new JLabel();
jLabel1.setText(initstate);
getContentPane().add(jLabel1, new AnchorConstraint(182, 910, 419, 64, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
jLabel1.setPreferredSize(new java.awt.Dimension(280, 28));
}
{
jMenuBar1 = new JMenuBar();
setJMenuBar(jMenuBar1);
jMenuBar1.setPreferredSize(new java.awt.Dimension(331, 19));
{
jMenu1 = new JMenu();
jMenuBar1.add(jMenu1);
jMenu1.setText("文件");
{
jMenuItem1 = new JMenuItem();
jMenu1.add(jMenuItem1);
jMenuItem1.setText("打开");
jMenuItem1.addActionListener(this);
}
{
jMenuItem3 = new JMenuItem();
jMenu1.add(jMenuItem3);
jMenuItem3.setText("\u8f93\u51fa\u6587\u4ef6\u5939");
jMenuItem3.addActionListener(this);
}
{
jMenuItem2 = new JMenuItem();
jMenu1.add(jMenuItem2);
jMenuItem2.setText("退出");
jMenuItem2.addActionListener(this);
}
}
}
{
jToggleButton2 = new JToggleButton();
getContentPane().add(jToggleButton2, new AnchorConstraint(538, 720, 716, 530, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
jToggleButton2.setText("\u89e3\u538b");
jToggleButton2.setPreferredSize(new java.awt.Dimension(63, 21));
jToggleButton2.addActionListener(this);
}
版权所有© 帮我毕业网 并保留所有权利