您当前的位置:首页 > 互联网教程

JAVA字符串写入文件再压缩(java字符串压缩算法)

发布时间:2025-05-20 09:39:25    发布人:远客网络

JAVA字符串写入文件再压缩(java字符串压缩算法)

一、JAVA字符串写入文件再压缩(java字符串压缩算法)

Java字符串压缩与解压

给你提供个思想

首先你这不是物理上的告芹压缩,也就是说袜袜毕它是一个逻辑上的我们好禅认同上的压缩。

你需要写一个算法来对你所要处理的数据进行统计,然后按照算法来改变结果。

最后达到一个后台的虚拟压缩(实际上不是压缩,只是算法)。

packagejavase1.day02;\x0d\x0a/**\x0d\x0a*1)一种字符串压缩算法\x0d\x0a*str="aaaabbccccddeaaa"\x0d\x0a*压缩为:"4a2b4c2d1e3a"\x0d\x0a*原理实现:\x0d\x0a*str="aaaabbccccddeaaa"\x0d\x0a*\x0d\x0a*c=str.charAt(i)//c是每个字符\x0d\x0a*1)初始化拆中\x0d\x0a*StringBuilderbuf=newStringBuilder();\x0d\x0a*intcount=0;代表相同的字符个数\x0d\x0a*charch=str.charAt(0);代表正在统计的相同字符'a'\x0d\x0a*2)从i=1开始迭代每个字符\x0d\x0a*c=str.charAt(i);//c是每个兄拍当前字符\x0d\x0a*3)检查当前字符c与羡御羡被统计ch是否一致\x0d\x0a*如果一致count++\x0d\x0a*否则(不一致)\x0d\x0a*向缓冲区buf增加count+ch\x0d\x0a*count=0,ch=c;\x0d\x0a*3)没有下个字符就结束\x0d\x0a*4)还有字符串吗?回到2)\x0d\x0a*\x0d\x0a*2)实现还原算法\x0d\x0a*str="4a2b4c2d1e3a";\x0d\x0a*i\x0d\x0a*/\x0d\x0apublicclassDemo5{\x0d\x0apublicstaticvoidmain(String[]args){\x0d\x0aStrings=comp("aaaawwwwe");\x0d\x0aSystem.out.println(s);\x0d\x0a//System.out.println(decomp(s));\x0d\x0a\x0d\x0a}\x0d\x0apublicstaticStringcomp(Stringstr){\x0d\x0ainti=1;\x0d\x0aStringBuilderbuf=newStringBuilder();\x0d\x0aintcount=1;\x0d\x0acharch=str.charAt(0);\x0d\x0afor(;;){\x0d\x0acharc=i==str.length()?'\10':str.charAt(i);\x0d\x0aif(c==ch){\x0d\x0acount++;\x0d\x0a}else{\x0d\x0aif(count==1)\x0d\x0abuf.append(ch);\x0d\x0aelse\x0d\x0abuf.append(count).append(ch);\x0d\x0acount=1;\x0d\x0ach=c;\x0d\x0a}\x0d\x0ai++;\x0d\x0aif(i==str.length()+1){\x0d\x0abreak;\x0d\x0a}\x0d\x0a}\x0d\x0areturnbuf.toString();\x0d\x0a\x0d\x0a}\x0d\x0a}

1.可以考虑引入字符A~Z,加上0~9,形成36进制(更进一步可以大小写敏感扰颤,加上a~z,形成62进制);

2.将上述字符串除以36取余;作为个位数;上述字符串除以36取整,作为结果缓春败,重复本步森侍取余计算。

4.反向解析,将上述结果,分别按位数乘以36;

5.最后合并相加,获得原字符串。

Stringstr="aaaaaasssscccccdddddddwsaaasdcas";intlength=str.length();List弯迹Integerindex=newArrayListInteger隐闹乱();for(inti=0;ilength-1;i++){if(str.charAt(i)!=str.charAt(i+1)){index.add(i);}}if(str.charAt(length-2)!=str.charAt(length-1)){index.add(length-1);}intstart=0;StringBufferresult=newStringBuffer();for(inti=0;i灶档index.size();i++){intend=index.get(i)+1;if(i!=0){start=index.get(i-1)+1;}Stringtemp=str.substring(start,end);result.append(temp.charAt(0)).append(end-start);}System.out.println(result.toString());最终结果是:a6s4c5d7w1s1a3s1d1c1a1s1

Java编写方法实现字符串压缩的功能,连续的n个字符x表示为xn,例如aaaa表示为a4,

package?demo1;

????public?static?String?reduceString(final?String?str)?{??

????????StringBuffer?result?=?new?StringBuffer();??

????????final?int?count?=?str.length();??

????????char?山答c1?=?str.charAt(0);??

????????for?(int?i?=?1;?i??count;?i++)??{??

????????????char?c2?=?str.charAt(i);??

????????????if?岁没(c1?==?c2)??

????????????result.append(c1).append(sum);??

????????result.append(sum).append(c1);??

????????return?result.toString();??

????public?static?void?main(String[]?args)??{??

????????System.out.println(reduceString("aaaaaaaabbbccdddeeebbba"));??

二、用java小应用程序实现文件压缩、解压缩

FileInputStream fis=new FileInputStream(%%1);

FileOutputStream fos=new FileOutputStream(%%2);

ZipOutputStream zipOut=new ZipOutputStream(fos);

ZipEntry entry=new ZipEntry(args[0]);

while((nNumber=fis.read(buffer))!=-1)

zipOut.write(buffer,0,nNumber);

String%%1=System.getProperty("user.dir");

FileInputStream fis=new FileInputStream(%%1);

//创建ZIP压缩格式输入流对象实例

ZipInputStream zipin=new ZipInputStream(fis);

FileOutputStream fos=new FileOutputStream(%%2);

ZipEntry entry=zipin.getNextEntry();

while((nNumber=zipin.read(buffer,0,buffer.length))!=-1)

ArrayList<String> folderList= new ArrayList<String>();

for(int j= 0; j< folderList.size(); j++){

File file= new File(folderList.get(j));

File[] files= file.listFiles();

ArrayList<File> fileList= new ArrayList<File>();

for(int i= 0; i< files.length; i++){

folderList.add(files[i].getPath());

import org.apache.tools.zip.ZipOutputStream;//这个包在ant.jar里,要到官方网下载

//java.util.zip.ZipOutputStream

String zipFileName=%%2;//打包后文件名字

ZipOutputStream out= new ZipOutputStream(new FileOutputStream(zipFileName));

out.putNextEntry(new org.apache.tools.zip.ZipEntry(base+"/"));

base= base.length()== 0?"": base+"/";

for(int i= 0; i< fl.length; i++){

zip(out, fl[i], base+ fl[i].getName());

out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));

FileInputStream in= new FileInputStream(f);

切,我刚好写了个压缩的,但没写解压的

1.解压的(参数两个,第一个是你要解压的zip文件全路径,第二个是你解压之后要存放的位置)

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.zip.ZipEntry;

import java.util.zip.ZipInputStream;

public static void main(String[] args){

extZipFileList(args[0],args[1]);

private static void extZipFileList(String zipFileName, String extPlace){

ZipInputStream in= new ZipInputStream(new FileInputStream(

while((entry= in.getNextEntry())!= null){

String entryName= entry.getName();

File file= new File(extPlace+ entryName);

System.out.println("创建文件夹:"+ entryName);

FileOutputStream os= new FileOutputStream(extPlace

// Transfer bytes from the ZIP file to the output file

while((len= in.read(buf))> 0){

System.out.println("解压文件成功");

压缩的(参数最少传两个,第一个是你压缩之后的文件存放的位置以及名字,第二个是你要压缩的文件或者文件夹所在位置,也可以传多个文件或文件夹)

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

public static String zipFileProcess(ArrayList outputZipFileNameList, String outputZipNameAndPath){

ArrayList fileNames= new ArrayList();

ArrayList files= new ArrayList();

FileOutputStream fileOut= null;

ZipOutputStream outputStream= null;

FileInputStream fileIn= null;

StringBuffer sb= new StringBuffer(outputZipNameAndPath);

// FileInputStream fileIn=null;

if(outputZipNameAndPath.indexOf(".zip")!=-1){

outputZipNameAndPath= outputZipNameAndPath;

outputZipNameAndPath= sb.toString();

fileOut= new FileOutputStream(outputZipNameAndPath);

outputStream= new ZipOutputStream(fileOut);

int outputZipFileNameListSize= 0;

if(outputZipFileNameList!= null){

outputZipFileNameListSize= outputZipFileNameList.size();

for(int i= 0; i< outputZipFileNameListSize; i++){

File rootFile= new File(outputZipFileNameList.get(i).toString());

listFile(rootFile, fileNames, files,"");

for(int loop= 0; loop< files.size(); loop++){

fileIn= new FileInputStream((File) files.get(loop));

outputStream.putNextEntry(new ZipEntry((String) fileNames.get(loop)));

byte[] buffer= new byte[1024];

while(fileIn.read(buffer)!=-1){

public static void main(String[] args){

ArrayList outputZipFileName=new ArrayList();

for(int i=1;i<argSize;i++){

outputZipFileName.add(args[i]);

ZipFileOther instance=new ZipFileOther();

instance.zipFileProcess(outputZipFileName,savePath);

private static void listFile(File parentFile, List nameList, List fileList, String directoryName){

if(parentFile.isDirectory()){

File[] files= parentFile.listFiles();

for(int loop= 0; loop< files.length; loop++){

listFile(files[loop], nameList, fileList, directoryName+ parentFile.getName()+"/");

nameList.add(directoryName+ parentFile.getName());

三、java怎么读取Zip和RAR里面的文件啊

1、ZipInputStream是一个指向ZIP文件的流,这个流最重要的方法就是getNextEntry方法,一个zip文件可以包含好几个被压缩的文件,这个方法的功能就是返回下一个目录项,也就是返回zip文件中的下一项,并且把流指向这个目录文件项。getNextEntry的返回值是ZipEntry,它表示zip文件中的一个项,它可以返回这个文件项的大小、名称等。你可以根据它返回的文件大小调用ZipInputStream的read方法来读取需要的字节。给你一个例子:public class ZipTest{

2、 public static void main(String args[]) throws FileNotFoundException, IOException{

3、 ZipInputStream zis= new ZipInputStream(new FileInputStream("c://a.zip"));//生成读取ZIP文件的流

4、 ZipEntry ze= zis.getNextEntry();//取得下一个文件项

5、 long size= ze.getSize();//取得这一项的大小

6、 FileOutputStream fos= new FileOutputStream("c://"+ze.getName());//产生输出文件对象

7、 for(int i= 0;i<size;i++){//循环读取文件并写入输出文件对象



相关内容FAQs: