我找到了解决方案,可以帮助某人,所以我发布了它。
步骤:获取变量,获取我需要的参数。
步骤:用户定义的Java类,在这里我解压缩文件,改变编码,这是代码:
import javax.swing.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.io.IOUtils;public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
Object[] outputRow = createOutputRow(r, data.outputRowMeta.size());
String fname = getVariable("VARIABLE_NAME", null);
String outDir = getVariable("VARIABLE_NAME", null);
System.out.println(fname + " " + outDir);
try {
java.io.File inputFile = new java.io.File(fname);
ZipFile zipFile = new ZipFile(inputFile, "cp866", false);
Enumeration enumEntry = zipFile.getEntries();
int i = 0;
while(enumEntry.hasMoreElements()){
ZipArchiveEntry entry = (ZipArchiveEntry) enumEntry.nextElement();
String entryName = entry.getName();
System.out.println(entryName);
OutputStream os = new FileOutputStream(new File(outDir, entryName));
InputStream is = zipFile.getInputStream(entry);
IOUtils.copy(is, os);
is.close();
os.close();
//Printing output fields
get(Fields.Out, "FNAME").setValue(outputRow, fname);
get(Fields.Out, "FileNameUnzipped").setValue(outputRow, entryName);
putRow(data.outputRowMeta, outputRow);
}
} catch (Exception exc) {
System.out.println("Faild to unzip");
exc.printStackTrace();
}
return true;
}
</code>
步骤:设置变量。
</醇>
</醇>