再 windows下通过 cmd命令执行解棚祥森压缩没问题,但是通过 java代码去执行不能解压是为什么?我在开始运行中输入命令: cmd/ c rar. exe x- y d:\\ auto. rar d:\\----上面命令可以解压成功,宴态但是通过下面 java代码不能实现解压缩功能,请指点。主要代码: java. lang. Runtime. getRuntime(). exec(" cmd/ c rar. exe x- y d:\\ auto. rar d:\\")
//解压缩ZIP 参数 zip文件(绝对路径) 返回解压后的文件列表(绝对路径)public static List untieZipFile(String zipFile) throws FileNotFoundException, IOException{
List fileList = new ArrayList()
// ZIP文件输入流
ZipInputStream zinStream
try {
zinStream = new ZipInputStream(new FileInputStream(zipFile))
ZipEntry ze
// pathTemp 去掉.zip后缀 生成对带粗乎应的释放文件夹
String pathTemp = zipFile.replaceAll("\\\\", "/").replaceAll("//","/").substring(0, zipFile.length() - 5)
// 如果有同名目录,删除原有目录下的文件
java.io.File oldFile = new File(pathTemp)
if (oldFile.exists()) {
deleteFileList(oldFile)
}
// 解压ZIP中全部文件
while ((ze = zinStream.getNextEntry()) != null) {
if(ze.getName().indexOf(".") != -1){
// fileTemp 获蠢悉得ZIP中文件列表的路径
String[] fileTemp = ze.getName().replaceAll("\\\\", "/").replaceAll("//", "/凳颤").split("/")
// writeFile ZIP中单个文件的绝对路径
String writeFile = pathTemp
for (int i = 0i <fileTemp.length-1i++) {
writeFile = writeFile + "/" + fileTemp[i]
}
java.io.File newFile = new File(writeFile)
if (!newFile.exists()) {
newFile.mkdirs()
}
// 构造出与ZIP中路径相同的输出流
OutputStream zoutStream = new FileOutputStream(writeFile + "/" + fileTemp[fileTemp.length - 1])
// 写入文件内容
int bytesRead = 0
byte[] buffer = new byte[8192]
while ((bytesRead = zinStream.read(buffer, 0, 8192)) != -1) {
zoutStream.write(buffer, 0, bytesRead)
}
zoutStream.flush()
zoutStream.close()
fileList.add(writeFile + "/" + fileTemp[fileTemp.length - 1])
}
}
zinStream.close()
} catch (FileNotFoundException e) {
throw new FileNotFoundException(FileUtils.class.getName()+ "#untieZipFile()#" + e.getMessage())
} catch (IOException e) {
throw new IOException(FileUtils.class.getName()+ "#untieZipFile()#" + e.getMessage())
}
return fileList
}
//删除目录
public static void deleteFileList(File oldFile) {
if (oldFile != null || oldFile.exists() || oldFile.isDirectory()) {
File[] oldFileList = oldFile.listFiles()
if(oldFileList!=null){
for (int i = 0i <oldFileList.lengthi++) {
if (oldFileList[i].isFile()) {
oldFileList[i].delete()
} else if (oldFileList[i].isDirectory()) {
deleteFileList(oldFileList[i])
}
}
}
oldFile.delete()
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)