Java中使用nashorn脚本压缩文件问题
今天在使用nashorn脚本压缩文件的时候,压缩文件后再解压后看的的文件大小是正确的,但是在使用md5检查文件的时候发现md5码却不一样,下面是最初的压缩文件代码。上面的代码最初是从工作正常的java代码翻译过来的,看着似乎没啥问题,执行也没有报错,就是压缩再解压后文件就不对了。
·
今天在使用nashorn脚本压缩文件的时候,压缩文件后再解压后看的的文件大小是正确的,但是在使用md5检查文件的时候发现md5码却不一样,下面是最初的压缩文件代码
load('nashorn:mozilla_compat.js');
importPackage(Packages.java.io);
importPackage(Packages.java.util);
importPackage(Packages.java.util.zip);
function compressFile(sourceFile, targetFile) {
var fos = new FileOutputStream(targetFile);
var zipOut = new ZipOutputStream(fos);
var fileToZip = new File(sourceFile);
var fis = new FileInputStream(fileToZip);
var zipEntry = new ZipEntry(fileToZip.getName());
zipOut.putNextEntry(zipEntry);
var bytes = [];
bytes.length = 1024;
var length = 0;
while ((length = fis.read(bytes, 0, 1024)) > 0) {
zipOut.write(bytes, 0, length);
}
fis.close();
zipOut.closeEntry();
zipOut.finish();
zipOut.close();
fos.close();
}
上面的代码最初是从工作正常的java代码翻译过来的,看着似乎没啥问题,执行也没有报错,就是压缩再解压后文件就不对了。
经过仔细检查,发现上面的代码中fis.read()方法是存在问题的,因为在JavaScript中没有方法重载,所以在java中读取的后返回的是读取的字节长度,但是在JavaScript中就不对了,它读取的是一个字节,返回的是读取的字节,知道问题有修改代码如下:
load('nashorn:mozilla_compat.js');
importPackage(Packages.java.io);
importPackage(Packages.java.util);
importPackage(Packages.java.util.zip);
function compressFile(sourceFile, targetFile) {
var fos = new FileOutputStream(targetFile);
var zipOut = new ZipOutputStream(fos);
var fileToZip = new File(sourceFile);
var fis = new FileInputStream(fileToZip);
var zipEntry = new ZipEntry(fileToZip.getName());
zipOut.putNextEntry(zipEntry);
var bufferSize = 1024;
var buffer = [];
var c = 0;
while ((c = fis.read()) != -1) {
buffer.push(c);
if (buffer.length == bufferSize) {
zipOut.write(buffer, 0, buffer.length);
zipOut.flush();
buffer = [];
}
}
zipOut.write(buffer, 0, buffer.length);
zipOut.flush();
fis.close();
zipOut.closeEntry();
zipOut.finish();
zipOut.close();
fos.close();
}
更多推荐


所有评论(0)