⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mydata.java

📁 利用JAVA 实现的 霍夫曼编码压缩解压缩算法
💻 JAVA
字号:
package compress;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class MyData
	{
		String dirName;
		String fileName1;
		String fileName2;
		private String article;
		private String huffman;
		public String cStat;
		public String wStat;
		public String endstring;
		private char chartype[];
		private char chartypefinal[];
		private int charnum[];
		private int w[];
		private int sametype;
		public MyData()
			{
				
			}
		//读入指定位置的文本文件
		public void readNewFile()
		{
			String s;
			this.setArticle("");
		try
			{
				File dirObject=new File(dirName);
				File fileObject=new File(dirObject,fileName1);
				DataInputStream inputFile=new DataInputStream(new FileInputStream(fileObject));	
				for (s=inputFile.readLine();s!=null;this.addArticle(s),this.addArticle("\n"),s=inputFile.readLine());
			}
		catch(IOException e)
			{}
		}
//		读入指定位置的压缩文件
		public void readCompressFile()
		{
			String s;
			this.setHuffman("");
			wStat="";
			cStat="";
		try
			{
				File dirObject=new File(dirName);
				File fileObject=new File(dirObject,fileName1);
				DataInputStream inputFile=new DataInputStream(new FileInputStream(fileObject));	
				this.setHuffman(inputFile.readLine());
				wStat=inputFile.readLine();
				endstring=inputFile.readLine();
				for (s=inputFile.readLine();s!=null;cStat=cStat+s,cStat=cStat+"\n",s=inputFile.readLine());
			}
		catch(IOException e)
			{}
		}
		//将压缩码写到指定文本文件内
		public void Compress()
			{
				try
					{
					File dirObject=new File(dirName);
					if(!dirObject.exists())
						dirObject.mkdir();
					File fileObject=new File(dirObject,fileName2);
					fileObject.createNewFile();
					DataOutputStream outputFile=new DataOutputStream(new FileOutputStream(fileObject));
					outputFile.writeBytes(this.getHuffman());
					outputFile.close();
					}
				catch(IOException e)
					{}
			}
//		//将解压文件写到指定文本文件内
		public void Decompress()
			{
				try
					{
					File dirObject=new File(dirName);
					if(!dirObject.exists())
						dirObject.mkdir();
					File fileObject=new File(dirObject,fileName2);
					fileObject.createNewFile();
					DataOutputStream outputFile=new DataOutputStream(new FileOutputStream(fileObject));
					outputFile.writeBytes(this.getArticle());
					outputFile.close();
					}
				catch(IOException e)
					{}
			}
		//统计读入文件的字符种类数量等
		public void StatNewFile()
		{
			cStat="";
			wStat="";
			chartype=new char[this.getArticle().length()];
			charnum=new int[this.getArticle().length()];
			for (int i = 0; i < this.getArticle().length(); i++)
				{
					if (texttype(this.getArticle().charAt(i)))
						{
							this.setChartype(i,this.getArticle().charAt(i));
							this.setCharnum(i,1);
						}
					else 
						this.plusCharnum(this.getSametype());
				}
			int j=0;
			for (int i=0;i<this.charnum.length;i++)
				if(charnum[i]!=0) j++;
			w=new int[j];
			chartypefinal=new char[j+1];
			j=0;
			for (int i=0;i<this.charnum.length;i++)
				{
					if(charnum[i]!=0) 
						{
							w[j]=charnum[i];
							j++;
						}
				}
			j=1;
			for (int i=0;i<this.chartype.length;i++)
				{
					if(charnum[i]!=0)
						{
							chartypefinal[j]=chartype[i];
							j++;
						}
				}
			for(int i=0;i<j;i++)
				{
					cStat=cStat+chartypefinal[i];
				}
			for(int i=0;i<j-1;i++)
				{
					wStat=wStat+w[i]+" ";
				}
		}
//		统计读入压缩文件
		public void StatCompressFile()
		{
			int j=0;
			for(int i=0;i<wStat.length();i++)
				if(wStat.charAt(i)==' ') j++;
			w=new int[j];
			for(int i=0;i<j;i++)
				w[i]=0;
			chartypefinal=new char[cStat.length()+1];
			for(int i=0,wl=0;i<wStat.length();)
				{
					while(wStat.charAt(i)!=' ')
						{
							w[wl]=w[wl]*10+wStat.charAt(i)-48;
							i++;
						}
					wl++;
					i++;
				}
			for(int i=0;i<cStat.length();i++)
				chartypefinal[i]=cStat.charAt(i);
		}
		//检测改字符是否已有
		public boolean texttype(char newchar)
			{
				for(int i=0;i<this.chartype.length;i++)
					if(newchar==this.getChartype(i))
						{
						this.setSametype(i);
						return false;
						}
				return true;
			}
		public void setArticle(String ob)
			{
				this.article = ob;
			}
		public void addArticle(String ob)
			{
				this.article = this.article+ob;
			}
		public String getArticle()
			{
				return article;
			}
		public void setCharnum(int i,int charnum)
			{
				this.charnum[i] = charnum;
			}
		public int getCharnum(int i)
			{
				return charnum[i];
			}
		public void plusCharnum(int i)
			{
				this.charnum[i]=this.getCharnum(i)+1;
			}
		public void setChartype(int i,char chartype)
			{
				this.chartype[i] = chartype;
			}
		public char getChartype(int i)
			{
				return chartype[i];
			}
		public char[] getChartype()
			{
				return chartype;
			}
		public void setChartypefinal(int i,char chartypefinal)
			{
				this.chartypefinal[i] = chartypefinal;
			}
		public char getChartypefinal(int i)
			{
				return chartypefinal[i];
			}
		public char[] getChartypefinal()
			{
				return chartypefinal;
			}
		public void setSametype(int sametype)
			{
				this.sametype = sametype;
			}
		public int getSametype()
			{
				return sametype;
			}
		public void setW(int i,int w)
			{
				this.w[i] = w;
			}
		public int getW(int i)
			{
				return w[i];
			}
		public int[] getW()
			{
				return w;
			}
		public void setDirName(String dirName)
			{
				this.dirName = dirName;
			}
		public String getDirName()
			{
				return dirName;
			}
		public void setFileName1(String fileName1)
			{
				this.fileName1 = fileName1;
			}
		public String getFileName1()
			{
				return fileName1;
			}
		public void setHuffman(String huffman)
			{
				this.huffman = huffman;
			}
		public void addHuffman(Object ob)
			{
				this.huffman = this.huffman+ob;
			}
		public String getHuffman()
			{
				return huffman;
			}
		public void setFileName2(String fileName2)
			{
				this.fileName2 = fileName2;
			}
		public String getFileName2()
			{
				return fileName2;
			}
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -