运行结果:请输入需要压缩的第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();

}
}

解决方案 »

  1.   

    注:System.out.println("是否还需要输入文件?yes/no");
    } while (cs.equals("yes"));
    in1.close();
    改为:
    System.out.println("是否还需要输入文件?y/n");
    BufferedReader in2 = new BufferedReader(new InputStreamReader(System.in));
    cs = in2.readLine();
    } while (cs.equals("y"));
    in1.close();
    后结果:请输入需要压缩的第1个文件的文件名:
    a.txt
    是否还需要输入文件?y/n
    y
    请输入需要压缩的第2个文件的文件名:
    b.txt
    是否还需要输入文件?y/n
    n
    Exception in thread "main" java.lang.NullPointerException
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at Zip.zip(Zip.java:28)
    at Main.main(Main.java:8)
      

  2.   

    for (int j = 0; j <file.length; j++) {
    BufferedInputStream in3;
    in3 = new BufferedInputStream(new FileInputStream(file[j]));
    out1.putNextEntry(new ZipEntry(file[j]));
    int c;
    while ((c = in3.read()) != -1)out1.write(c);
    in3.close();调试到这里出错了!
      

  3.   

    你的:
        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();是不对的,
    其实到循环结束,你只读到了最后一个文件,而且数组的前几项都是空的,
    在后面压缩的时候肯定会包空指针异常
      

  4.   


     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();
    }

    }
    }
    已经搞定  帮你改正了一些错误  除此之外没改别的 变量名虽然很难看我也没改到
      

  5.   

    呵呵多谢两位帮忙了……前两天经过调试确实发现huihuixuejava所提的问题了后来用容器装就对了!sasuke38呵呵有心了!非常非常非常感谢!呵呵作业基本完成咯……