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、对象是在堆中,而不是在栈中
至于这么做的原因,主要还是要使得基本类型与对象操作的一致性。