package com.zjasm.util;
/**
* Created with IntelliJ IDEA.
* Date: 13-7-31
* Time: 下午4:29
* To change this template use File | Settings | File Templates.
*/
/**
version: 1.1 / 2007-01-25
- changed BOM recognition ordering (longer boms first)
Original pseudocode : Thomas Weidenfeller
Implementation tweaked: Aki Nieminen
http://www.unicode.org/unicode/faq/utf_bom.html
BOMs:
00 00 FE FF = UTF-32, big-endian
FF FE 00 00 = UTF-32, little-endian
EF BB BF = UTF-8,
FE FF = UTF-16, big-endian
FF FE = UTF-16, little-endian
Win2k Notepad:
Unicode format = UTF-16LE
***/
import java.io.*;
/**
* Generic unicode textreader, which will use BOM mark
* to identify the encoding to be used. If BOM is not found
* then use a given default or system encoding.
*/
public class UnicodeReader extends Reader {
PushbackInputStream internalIn;
InputStreamReader internalIn2 = null;
String defaultEnc;
private static final int BOM_SIZE = 4;
/**
*
* @param in inputstream to be read
* @param defaultEnc default encoding if stream does not have
* BOM marker. Give NULL to use system-level default.
*/
UnicodeReader(InputStream in, String defaultEnc) {
internalIn = new PushbackInputStream(in, BOM_SIZE);
this.defaultEnc = defaultEnc;
}
public String getDefaultEncoding() {
return defaultEnc;
}
/**
* Get stream encoding or NULL if stream is uninitialized.
* Call init() or read() method to initialize it.
*/
public String getEncoding() {
if (internalIn2 == null) return null;
return internalIn2.getEncoding();
}
/**
* Read-ahead four bytes and check for BOM marks. Extra bytes are
* unread back to the stream, only BOM bytes are skipped.
*/
protected void init() throws IOException {
if (internalIn2 != null) return;
String encoding;
byte bom[] = new byte[BOM_SIZE];
int n, unread;
n = internalIn.read(bom, 0, bom.length);
if ( (bom[0] == (byte)0x00) && (bom[1] == (byte)0x00) &&
(bom[2] == (byte)0xFE) && (bom[3] == (byte)0xFF) ) {
encoding = "UTF-32BE";
unread = n - 4;
} else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) &&
(bom[2] == (byte)0x00) && (bom[3] == (byte)0x00) ) {
encoding = "UTF-32LE";
unread = n - 4;
} else if ( (bom[0] == (byte)0xEF) && (bom[1] == (byte)0xBB) &&
(bom[2] == (byte)0xBF) ) {
encoding = "UTF-8";
unread = n - 3;
} else if ( (bom[0] == (byte)0xFE) && (bom[1] == (byte)0xFF) ) {
encoding = "UTF-16BE";
unread = n - 2;
} else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) ) {
encoding = "UTF-16LE";
unread = n - 2;
} else {
// Unicode BOM mark not found, unread all bytes
encoding = defaultEnc;
unread = n;
}
//System.out.println("read=" + n + ", unread=" + unread);
if (unread > 0) internalIn.unread(bom, (n - unread), unread);
// Use given encoding
if (encoding == null) {
internalIn2 = new InputStreamReader(internalIn);
} else {
internalIn2 = new InputStreamReader(internalIn, encoding);
}
}
public void close() throws IOException {
init();
internalIn2.close();
}
public int read(char[] cbuf, int off, int len) throws IOException {
init();
return internalIn2.read(cbuf, off, len);
}
}
package com.zjasm.util;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import java.io.*;
import java.util.*;
/**
* Created with IntelliJ IDEA.
* Date: 13-7-8
* Time: 上午10:25
* To change this template use File | Settings | File Templates.
*/
public class ZipUtil {
public static final int BUFFER = 1024*5;
/**
* 可以处理中文文件名
*/
public static List unZip(String path){
List zipList = new ArrayList();
int count = -1;
int index = -1;
File file = null;
InputStream is = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
String newFilePath = path.substring(0,path.lastIndexOf(".zip"))+"\\";
new File(newFilePath).mkdirs();
String targetPath = newFilePath;//解压到路径
try{
ZipFile zipFile = new ZipFile(path,"utf-8");//防止中文文件名乱码
Enumeration entries = zipFile.getEntries();
while(entries.hasMoreElements()){
byte buf[] = new byte[BUFFER];
ZipEntry entry = (ZipEntry)entries.nextElement();
String filename = entry.getName();
if (entry.isDirectory()) {
new File(targetPath + filename).mkdirs();
continue;
}
zipList.add(filename);
index = filename.lastIndexOf("/");
if(index > -1){
filename = filename.substring(index+1);
}
filename = targetPath + filename;
file = new File(filename);
file.createNewFile();
is = zipFile.getInputStream(entry);
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos, BUFFER);
while((count = is.read(buf)) > -1){
bos.write(buf, 0, count );
}
bos.flush();
bos.close();
fos.close();
is.close();
}
zipFile.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
return zipList;
}
/**
* 解压zip文件(不支持中文文件名)
*
* @param filePath
* zip文件全路径
* @throws IOException
*/
/*public static List unZip(String filePath)
throws IOException {
List zipList = new ArrayList();
String newFilePath = filePath.substring(0,filePath.lastIndexOf(".zip"))+"\\";
new File(newFilePath).mkdirs();
String targetPath = newFilePath;//解压到路径
ZipFile zipFile = new ZipFile(filePath);
Enumeration emu = zipFile.entries();
while (emu.hasMoreElements()) {
ZipEntry entry = (ZipEntry) emu.nextElement();
zipList.add(entry.getName());
if (entry.isDirectory()) {
new File(targetPath + entry.getName()).mkdirs();
continue;
}
BufferedInputStream bis = new BufferedInputStream(
zipFile.getInputStream(entry));
File file = new File(targetPath+entry.getName());
File parent = file.getParentFile();
if (parent != null && (!parent.exists())) {
parent.mkdirs();
}
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER);
int count;
byte data[] = new byte[BUFFER];
while ((count = bis.read(data, 0, BUFFER)) != -1) {
bos.write(data, 0, count);
}
bos.flush();
bos.close();
fos.close();
bis.close();
}
return zipList;
}*/
/**
* 动态改变数组
*
*/
public static Object[] insertArr(Object[] arr, Object str){
int size = arr.length;
Object[] tmp = new Object[size + 1];
System.arraycopy(arr, 0, tmp, 0, size);
tmp[size] = str;
return tmp;
}
public static String loadFile(String file) throws IOException {
// read text file, auto recognize bom marker or use
// system default if markers not found.
BufferedReader reader = null;
CharArrayWriter writer = null;
UnicodeReader r = new UnicodeReader(new FileInputStream(file), null);
char[] buffer = new char[16 * 1024]; // 16k buffer
int read;
try {
reader = new BufferedReader(r);
writer = new CharArrayWriter();
while( (read = reader.read(buffer)) != -1) {
writer.write(buffer, 0, read);
}
writer.flush();
return writer.toString();
} catch (IOException ex) {
throw ex;
} finally {
try {
writer.close(); reader.close(); r.close();
} catch (Exception ex) { }
}
}
public String readTxt(String txtPath){
StringBuffer stringBuffer = new StringBuffer();
String line = null;
try {
InputStreamReader read = new InputStreamReader(
new FileInputStream(new File(txtPath)),"utf-8");//考虑到编码格式
BufferedReader br = new BufferedReader(read);
while ((line = br.readLine()) != null) {
stringBuffer.append(line+"\n");
}
br.close();
read.close();
} catch (Exception e) {
e.printStackTrace();
}
return stringBuffer.toString();
}
}
分享到:
相关推荐
在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...
本篇文章将详细探讨如何使用Java内置的IO流来实现文件夹的zip压缩以及zip压缩包的解压,无需依赖其他的第三方库如Apache Commons IO或JavaZip。 ### 文件夹压缩成ZIP 首先,我们需要理解如何将一个文件夹及其内容...
Java中递归逻辑循环调用解压zip里面所有的压缩包 Java中递归逻辑循环调用解压zip里面所有的压缩包
Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...
本文将详细讲解如何使用Java实现ZIP压缩包的加密与解密。 首先,我们需要理解加密的基本概念。加密是将明文数据转换为无法轻易理解的密文,以保护数据的安全性。解密则是将密文还原为原始的明文。在ZIP压缩包中,...
在这个"gradle-6.1.1 zip压缩包"中,我们能够找到所有你需要快速获取和使用Gradle 6.1.1的资源。 首先,让我们详细了解一下Gradle的核心特性: 1. **基于DSL(领域特定语言)**:Gradle使用Groovy或者Kotlin DSL...
java 打zip压缩包 解压缩包Eclipse项目20111011 java 打zip压缩包 解压缩包Eclipse项目20111011java 打zip压缩包 解压缩包Eclipse项目20111011
### JAVA解压ZIP多层目录文件(需ant.jar) #### 概述 本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip....
在Java编程中,处理文件和压缩包操作是常见的任务,特别是在软件开发和数据传输中。本文将详细讲解如何使用Java实现将多目录多层级的文件打成ZIP包,以及如何解压这些ZIP包。我们将主要关注`FileUtils.java`这个类,...
在这个场景中,我们关注的是如何使用Java来实现文件压缩包的上传以及在服务器上的解压缩。Java作为一种强大的编程语言,提供了丰富的库来支持这样的操作,特别是在涉及到SFTP(Secure File Transfer Protocol)时,...
`Java++zip压缩包查看程序源码`提供了一种方式来查看和操作ZIP压缩包内的文件,这对于开发人员来说是很有用的工具。Java标准库中的`java.util.zip`包提供了处理ZIP文件所需的类和接口,如`ZipInputStream`、`...
1. **解压**:首先,你需要解压缩`mysql-connector-java-5.1.40.zip`文件,将`mysql-connector-java-5.1.40.jar`文件提取出来。 2. **配置类路径**:将`mysql-connector-java-5.1.40.jar`添加到你的Java项目的类路径...
在Java编程中,处理压缩文件,如ZIP格式的文件,是一项常见的任务。本文将深入探讨如何使用Java来获取ZIP文件的名称以及如何高效地解压缩这些文件,特别是通过多线程来提高性能。 首先,我们需要引入Java的内置库`...
在Java编程环境中,上传并...通过结合标准库和第三方库,我们可以构建一个功能完备的文件处理系统,满足上传、解压ZIP和RAR文件的需求。记得在实际开发中根据项目需求进行适当的调整和优化,确保系统的稳定性和效率。
java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;
解压"mysql-connector-java-5.1.48.zip"后,你会得到"mysql-connector-java-5.1.48.jar"文件。这是一个包含MySQL JDBC驱动的所有必要类和资源的Java归档(JAR)文件。在Java应用中,你需要将这个JAR文件添加到项目的...
在Java编程中,有时我们需要对已经存在的ZIP文件进行操作,比如替换其中的某个文件,而无需将整个ZIP文件解压后再重新压缩。这样的需求在处理大量数据或优化性能时尤其重要,因为它避免了创建临时文件和多次I/O操作...
在Java编程语言中,开发一个能够查看zip压缩包内容的程序是一项常见的任务。这个压缩包“基于Java的源码-zip压缩包查看程序源码.zip”包含了一个实现此类功能的项目源代码。以下是对该程序可能涉及的关键知识点的...
使用`java.util.zip`包中的`ZipInputStream`和`ZipEntry`类,可以读取并解压ZIP文件。以下是一个基本的解压流程: - 创建`ZipInputStream`实例,传入文件输入流。 - 循环遍历`ZipInputStream`的`ZipEntry`,获取...
Java提取压缩包中的文件,文件操作的范畴,操作对象为ZIP格式的压缩文件,将从ZIP中提取出BMP图像文件,要将从压缩包中提取文件,必须先解压压缩包,然后将指定文件拷贝出来,代码中先实现了对zip文件的解压,然后...