如何从两个.doc文件创建.zip文件?

时间:2015-10-06 14:21:03

标签: java zip eclipse-rcp rcp

我想编写一个单元测试来测试从两个.doc文件创建.zip文件。 BU我发错了:创建zip文件出错:java.io.FileNotFoundException:D:\ file1.txt(系统找不到指定的文件)

我的代码在这里:

@Test
public void testIsZipped() {

    String actualValue1 = "D:/file1.txt";
    String actualValue2 = "D:/file2.txt";

    String zipFile = "D:/file.zip";

    String[] srcFiles = { actualValue1, actualValue2 };

    try {

        // create byte buffer

        byte[] buffer = new byte[1024];

        FileOutputStream fos = new FileOutputStream(zipFile);
        zos = new ZipOutputStream(fos);

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

            File srcFile = new File(srcFiles[i]);

            FileInputStream fis = new FileInputStream(srcFile);

            // begin writing a new ZIP entry, positions the stream to the
            // start of the entry data

            zos.putNextEntry(new ZipEntry(srcFile.getName()));

            int length;

            while ((length = fis.read(buffer)) > 0) {

                zos.write(buffer, 0, length);
            }

            zos.closeEntry();

            // close the InputStream

            fis.close();
        }

        // close the ZipOutputStream

        zos.close();

    }

    catch (IOException ioe) {

        System.out.println("Error creating zip file: " + ioe);
    }

    String result = zos.toString();

    assertEquals("D:/file.zip", result);
}

我可以从zos获取zip文件的名称进行测试,如何理解通过测试?任何人都可以帮我解决这个错误吗?谢谢。

1 个答案:

答案 0 :(得分:0)

首先,您的文件是否是以前的测试方法创建的?如果是,请考虑junit测试不按您定义测试方法的顺序执行,请看一下:
How to run test methods in specific order in JUnit4?

其次,您可以添加调试行:

File srcFile = new File(srcFiles[i]);
System.out.append(srcFile+ ": " + srcFile.exists() + " " + srcFile.canRead());

解决异常后你会遇到这个问题,测试会失败:

String result = zos.toString();

assertEquals("D:/file.zip", result);

zos.toString()将返回类似于:&#34; java.util.zip.ZipOutputStream@1ae369b7"它不等于&#34; D:/file.zip"。

String zipFile = "D:/file.zip";
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile));
System.out.println(zos.toString());