java怎么解包

Python015

java怎么解包,第1张

//解压缩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()

}

}

-128到127是一个内存池中,在int定义时开辟了该片内存空间,所有的int型的数据都会在这片内存中取值,所以,-128到127比较都是true,不在这个范围会另外新开辟内存空间,这样,他们指向的地址就是不一致的。

你说的打包和解绑其实在java中叫自动拆箱和装箱,更形象,Integer是对象类型的,int是简单类型,Integer在网络传输时不会出现异常,Integer是对象类型,默认是null值,符合我们的要求,在转换过程中又会自动转换

Java的自动包装,是针对基本类型的操作与对象操作不同而进行的一种特殊处理方式。

以下是摘自《Thinking in Java》中文第四版第23页的一段话:

“基本类型具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。”

从以上内容可以知道:

1、打包后的是对象

2、对象是在堆中,而不是在栈中

至于这么做的原因,主要还是要使得基本类型与对象操作的一致性。