📄 jzjfile.java
字号:
if (record.getRootDirectory() != null &&
(!rootDirectories.contains(record.getRootDirectory()))) {
rootDirectories.add(record.getRootDirectory());
}*/
}
isScaned = true;
}
catch (IOException e) {
}
}
/**
* 将指定的项目导出为文件,如果导出目录中已经存在该文件则不会覆盖。
* @param entryName 需要导出的项目名称
* @param fileName 导出后的文件名
*/
public void extractEntryToFile(String entryName, String fileName) {
extractEntry(entryName, fileName, false);
}
/**
* 将指定的项目导出为文件。
* @param entryName 需要导出的项目名称
* @param fileName 导出后的文件名
* @param overWrite 文件已经存在时是否进行覆盖
*/
public void extractEntryToFile(String entryName, String fileName,
boolean overWrite) {
extractEntry(entryName, fileName, overWrite);
}
/**
* 将指定的项目导出为文件。
* @param entryName 需要导出的项目名称
* @param fileName 导出后的文件名
* @param overWrite 文件已经存在时是否进行覆盖
*/
private void extractEntry(String entryName, String fileName,
boolean overWrite) {
if (FileUtil.isFileExist(fileName) && overWrite == false) {
return;
}
else {
try {
ZipInputStream zin = new ZipInputStream(new FileInputStream(selfFile));
ZipEntry entry;
while ( (entry = zin.getNextEntry()) != null) {
if (entry.getName().equals(entryName)) {
byte[] buf = new byte[4096];
BufferedInputStream bin = new BufferedInputStream(zin);
FileUtil.makeDirectory(fileName);
BufferedOutputStream bout = new BufferedOutputStream(new
FileOutputStream(fileName));
while (bin.read(buf, 0, 1) != -1) {
bout.write(buf, 0, 1);
}
bout.close();
bin.close(); //by barney
}
zin.closeEntry();
}
zin.close();
}
catch (IOException e) {
logger.error(e.getLocalizedMessage());
}
}
}
/**
* 将指定的多个项目分别导出为文件,在已经存在的情况下不进行覆盖。
* @param entryNames 需要导出的项目名称
* @param fileNames 导出后的文件名
*/
public void extractEntriesToFiles(String[] entryNames, String[] fileNames) {
extractEntries(entryNames, fileNames, false);
}
/**
* 将指定的多个项目分别导出为文件。
* @param entryNames 需要导出的项目名称
* @param fileNames 导出后的文件名
* @param overWrite 文件已经存在时是否进行覆盖
*/
public void extractEntriesToFiles(String[] entryNames, String[] fileNames,
boolean overWrite) {
extractEntries(entryNames, fileNames, overWrite);
}
/**
* 将指定的多个项目分别导出为文件。
* @param entryNames 需要导出的项目名称
* @param fileNames 导出后的文件名
* @param overWrite 文件已经存在时是否进行覆盖
*/
private void extractEntries(String[] entryNames, String[] fileNames,
boolean overWrite) {
try {
ZipInputStream zin = new ZipInputStream(new FileInputStream(selfFile));
ZipEntry entry;
while ( (entry = zin.getNextEntry()) != null) {
int index = getContainEntry(entry.getName(), entryNames);
if ( (index != -1) &&
(overWrite || !FileUtil.isFileExist(fileNames[index]))) {
byte[] buf = new byte[4096];
BufferedInputStream bin = new BufferedInputStream(zin);
FileUtil.makeDirectory(fileNames[index]);
BufferedOutputStream bout = new BufferedOutputStream(new
FileOutputStream(fileNames[index]));
while (bin.read(buf, 0, 1) != -1) {
bout.write(buf, 0, 1);
}
bout.close();
bin.close(); //by barney
}
zin.closeEntry();
}
zin.close();
}
catch (IOException e) {
logger.error(e.getLocalizedMessage());
}
}
/**
* 从压缩包中删除指定的项目。
* @param entry 要删除的项目名
*/
public void deleteEntry(String entry) {
ZipOutputStream zout = null;
ZipInputStream zin = null;
File tmpzip = null;
try {
tmpzip = File.createTempFile("zip", ".tmp", new File("."));
zin = new ZipInputStream(new FileInputStream(selfFile));
zout = new ZipOutputStream(new FileOutputStream(tmpzip));
ZipEntry ze;
int len = 0;
byte[] b = new byte[4096];
while ( (ze = zin.getNextEntry()) != null) {
if (ze.getName().equals(entry)) {
zin.closeEntry();
count--;
continue;
}
zout.putNextEntry(new ZipEntry(ze.getName()));
logger.debug(ze.getName());
while ( (len = zin.read(b)) != -1) {
zout.write(b, 0, len);
}
zout.closeEntry();
zin.closeEntry();
}
zout.close();
zin.close();
String slefFileName = selfFile.getPath();
selfFile.delete();
tmpzip.renameTo(new File(slefFileName));
selfFile = new File(slefFileName);
isChanged = true;
}
catch (IOException e) {
logger.error(e.getLocalizedMessage());
}
}
/**
* 从压缩包中删除指定的项目。
* @param entries 要删除的项目名
*/
public void deleteEntries(String[] entries) {
ZipOutputStream zout = null;
ZipInputStream zin = null;
File tmpzip = null;
try {
tmpzip = File.createTempFile("zip", ".tmp", new File("."));
zin = new ZipInputStream(new FileInputStream(selfFile));
zout = new ZipOutputStream(new FileOutputStream(tmpzip));
ZipEntry ze;
int len = 0;
byte[] b = new byte[4096];
while ( (ze = zin.getNextEntry()) != null) {
if (getContainEntry(ze.getName(), entries) != -1) {
zin.closeEntry();
count--;
continue;
}
zout.putNextEntry(new ZipEntry(ze.getName()));
while ( (len = zin.read(b)) != -1) {
zout.write(b, 0, len);
}
zout.closeEntry();
zin.closeEntry();
}
zout.close();
zin.close();
String slefFileName = selfFile.getPath();
selfFile.delete();
tmpzip.renameTo(new File(slefFileName));
selfFile = new File(slefFileName);
isChanged = true;
}
catch (IOException e) {
logger.error(e.getLocalizedMessage());
}
}
/**
* 得到压缩包的文件名。
* @return 压缩包的文件名
*/
public String getName() {
return selfFile.getName();
}
/**
* 得到压缩包的全文件名,即绝对路径名。
* @return 压缩包的全文件名
*/
public String getFullName() {
return selfFile.getAbsolutePath();
}
/**
* 得到压缩包所在的目录的目录名。
* @return 压缩包所在的目录的目录名
*/
public String getParentPath() {
return selfFile.getParent();
}
/**
* 得到压缩包中的所有项目的枚举。
* @return 压缩包中的所有项目的枚举
*/
public Iterator entries() {
return entries.iterator();
}
/**
* 得到压缩包中的所有项目的项目名的数组。
* @return 压缩包中的所有项目的项目名的数组
*/
public String[] getEntryNames() {
String[] names = new String[this.entries.size()];
Iterator entries = entries();
int i = 0;
while (entries.hasNext()) {
names[i++] = (String) ( ( (JZJFileRecord) entries.next()).get(0));
}
return names;
}
/**
* 得到压缩包中的所有项目的项目的数组。
* @return 压缩包中的所有项目的项目的数组
*/
public JZJFileRecord[] getEntries() {
JZJFileRecord[] records = new JZJFileRecord[count];
for (int i = 0; i < records.length; i++) {
records[i] = (JZJFileRecord) entries.get(i);
}
return records;
}
/**
* 得到压缩包中的所有根项目的枚举。
* @return 压缩包中的所有根项目的枚举
*/
/*public Iterator rootEntries() {
return rootEntries.iterator();
}*/
/**
* 得到压缩包中的所有根项目的项目名的数组。
* @return 压缩包中的所有根项目的项目名的数组
*/
/*public String[] getRootEntryNames() {
String[] names = new String[rootEntries.size()];
Iterator rootEntries = rootEntries();
int i = 0;
while (rootEntries.hasNext()) {
names[i++] = (String) ( ( (JZJFileRecord) rootEntries.next()).get(
"name"));
}
return names;
}*/
/**
* 得到压缩包中的所有根项目目录的枚举。
* @return 压缩包中的所有根项目目录的枚举
*/
/*public Iterator rootDirectoryEntries() {
return rootDirectories.iterator();
}*/
/**
* 得到压缩包中的所有根项目目录名的数组。
* @return 压缩包中的所有根项目目录名的数组
*/
/*public String[] getRootDirectoryNames() {
String[] names = new String[rootDirectories.size()];
Iterator rootDirectories = rootDirectoryEntries();
int i = 0;
while (rootDirectories.hasNext()) {
names[i++] = (String) rootDirectories.next();
}
return names;
}*/
/**
* 判断两个项目是否相同。
* @param one 项目一
* @param two 项目二
* @return 如果两个项目的项目名相同则返回true,否则返回false
*/
private boolean isSameEntry(ZipEntry one, ZipEntry two) {
return one.getName().equals(two.getName());
}
/**
* 判断在项目数组中是否存在指定的项目。
* @param one 指定的项目
* @param others 项目数组
* @return 存在返回true,否则返回false
*/
private boolean isContainEntry(ZipEntry one, ZipEntry[] others) {
for (int i = 0; i < others.length; i++) {
if (isSameEntry(one, others[i])) {
return true;
}
}
return false;
}
/**
* 得到指定项目在项目数组中的索引。
* @param one 指定项目
* @param others 项目数组
* @return 指定项目在项目数组中的索引,不存在时返回-1
*/
private int getContainEntry(String one, String[] others) {
for (int i = 0; i < others.length; i++) {
if (one.equals(others[i])) {
return i;
}
}
return -1;
}
/**
* 如果自身代表的压缩包不存在则创建一个新文件。
*/
private void createNewFile() {
if (!selfFile.exists()) {
try {
selfFile.createNewFile();
}
catch (IOException e) {
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -