当前位置: 代码迷 >> J2SE >> 解决不了的文件压缩有关问题!想了老半天了!请大家赐小弟我力量!先谢大家了…
  详细解决方案

解决不了的文件压缩有关问题!想了老半天了!请大家赐小弟我力量!先谢大家了…

热度:83   发布时间:2016-04-24 12:16:39.0
解决不了的文件压缩问题!想了老半天了!请大家赐我力量!先谢大家了……
运行结果:请输入需要压缩的第1文件的文件名:
a.txt
Exception in thread "main" java.lang.NullPointerException
at Zip.zip(Zip.java:19)
at Main.main(Main.java:8)
是否还需要输入文件?yes/no
不知道怎么解决了请高手指点。。谢谢。。
源代码:
//功能函数
import java.io.*;
import java.util.zip.*;

public class Zip {

void zip() throws IOException{

BufferedReader in1;
in1 = new BufferedReader(new InputStreamReader(System.in));
String cs = null;
String[] file;
int i = 0;
do {
System.out.println("请输入需要压缩的第"+(i+1)+"文件的文件名:");
file=new String[i+1];
file[i]=in1.readLine();
i++;
System.out.println("是否还需要输入文件?yes/no");
} while (cs.equals("yes"));
in1.close();

ZipOutputStream out1;
out1 = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream("b.zip")));
for (int j = 0; j <file.length; j++) {
BufferedInputStream in2;
in2 = new BufferedInputStream(new FileInputStream(file[j]));
out1.putNextEntry(new ZipEntry(file[j]));
int c = 0;
while ((c = in2.read()) != -1) {
out1.write(c);
}

in2.close();
}

out1.close();
}
}


//主函数
import java.io.IOException;


public class Main {
public static void main(String[] args) throws IOException {

Zip zp = new Zip();
zp.zip();

}
}


------解决方案--------------------
你的:
do {
System.out.println("请输入需要压缩的第"+(i+1)+"文件的文件名:");
file=new String[i+1];file[i]=in1.readLine();
i++;
System.out.println("是否还需要输入文件?yes/no");
} while (cs.equals("yes"));
in1.close();

是不对的,
其实到循环结束,你只读到了最后一个文件,而且数组的前几项都是空的,
在后面压缩的时候肯定会包空指针异常
------解决方案--------------------
Java code
 void zip() {        BufferedReader in1=new BufferedReader(new InputStreamReader(System.in));        String[] file=null;        try {            System.out.print("请输入压缩包数量:");            int sum=Integer.parseInt(in1.readLine());            file = new String[sum];            int i = 0;            do {                System.out.println("请输入需要压缩的第"+(i+1)+"文件的文件名:");                file[i]=in1.readLine();                i++;                } while (i<=sum-1);        } catch (IOException e) {            e.printStackTrace();        }        finally{            try {                if(null!=in1){                    in1.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }        ZipOutputStream out1 = null;        BufferedInputStream in2 = null;        try {            for (int j = 0; j <file.length; j++) {                out1 = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file[j]+j+"_b.zip")));                in2 = new BufferedInputStream(new FileInputStream(file[j]));                byte[] temp=new byte[in2.available()];                out1.putNextEntry(new ZipEntry(file[j]));                in2.read(temp);                out1.write(temp);            }        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        finally{            try {                if(null!=in2){                    in2.close();                }                if(null!=out1){                    out1.close();                }                System.out.println("文件另外压缩复制完成!");            } catch (IOException e) {                e.printStackTrace();            }                    }    }