?? jzjfilerecord.java
字號(hào):
package org.jr.jzj;
/**
* <p>Copyright: Copyright (c) 2002-2003</p>
* <p>Company: JavaResearch(http://www.javaresearch.org)</p>
* <p>最后更新日期:2003年3月3日
* @author Cherami,Barney,Brain
* @version 0.8
*/
import java.util.*;
import java.util.zip.*;
import org.jr.*;
import org.jr.io.*;
import org.jr.swing.table.*;
import org.jr.util.*;
/**
* 壓縮文件的一個(gè)記錄項(xiàng)的抽象。
* 根據(jù)區(qū)域設(shè)置其時(shí)間以及文件大小的表示方式,記錄的屬性用一個(gè)HashMap維護(hù),這樣便于進(jìn)行屬性的擴(kuò)展。
* 這個(gè)類實(shí)際上是一個(gè)工具類,將一個(gè)ZipEntry的信息進(jìn)行解析。
*/
public class JZJFileRecord
implements TableLineData, PropertyComparable {
public static final int NAME = 0;
public static final int SIZE = 1;
public static final int PACK = 2;
public static final int SCALE = 3;
public static final int TIME = 4;
public static final int TYPE = 5;
public static final int PATH = 6;
public final ZipEntry entry;
private static JZJLogger logger = new JZJLogger(JZJFileRecord.class);
private HashMap properties;
private static final int COUNT = 7;
private long size = 0;
private long pack = 0;
private float scale = 0.0f;
private Date modifyTime;
public static final String[] columnNames = new String[COUNT];
public static final Class[] columnClasses = new Class[COUNT];
static {
columnNames[NAME] = "name";
columnNames[SIZE] = "size";
columnNames[PACK] = "pack";
columnNames[SCALE] = "scale";
columnNames[TIME] = "time";
columnNames[TYPE] = "type";
columnNames[PATH] = "path";
columnClasses[NAME] = String.class;
columnClasses[SIZE] = Long.class;
columnClasses[PACK] = Long.class;
columnClasses[SCALE] = Float.class;
columnClasses[TIME] = Date.class;
columnClasses[TYPE] = String.class;
columnClasses[PATH] = String.class;
}
/**
* 構(gòu)造方法,在完成初始化的同時(shí)讀取記錄的所有屬性。
* @param entry 原始信息
*/
public JZJFileRecord(ZipEntry entry) {
this.entry = entry;
properties = new HashMap();
getFileProperties();
getDateTimeProperties();
getSizeProperties();
}
/**
* 記錄的字符串表示。
* @return 記錄的字符串表示
*/
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("JZJFileRecord:[");
sb.append(properties.get("name")).append(",");
sb.append(properties.get("size")).append(",");
sb.append(properties.get("pack")).append(",");
sb.append(properties.get("scale")).append(",");
sb.append(properties.get("time")).append(",");
sb.append(properties.get("type")).append(",");
sb.append(properties.get("path"));
sb.append("]");
return sb.toString();
}
/**
* 解析文件相關(guān)的屬性:文件名,擴(kuò)展名,根目錄以及路徑。
*/
private void getFileProperties() {
String fileName = entry.getName();
properties.put(columnNames[NAME], FileUtil.getNamePart(fileName));
properties.put(columnNames[PATH], FileUtil.getPathPart(fileName));
properties.put(columnNames[TYPE], FileUtil.getTypePart(fileName));
}
/**
* 解析最后一次修改時(shí)間。
*/
private void getDateTimeProperties() {
modifyTime = new Date(entry.getTime());
properties.put(columnNames[TIME], modifyTime);
}
/**
* 解析大小屬性。
*/
private void getSizeProperties() {
size = entry.getSize();
properties.put(columnNames[SIZE], new Long(size));
pack = entry.getCompressedSize();
properties.put(columnNames[PACK], new Long(pack));
if (size == -1 || pack == -1) {
properties.put(columnNames[SCALE], new Float(Float.NaN));
}
else {
if (size == 0) {
scale = 1.0f;
}
else {
scale = (float) pack / (float) size;
}
properties.put(columnNames[SCALE], new Float(scale));
}
}
/**
* 得到原始的大小。
* @return 記錄的大小
*/
public long getSize() {
return size;
}
/**
* 得到壓縮后的大小。
* @return 壓縮后的大小
*/
public long getCompressedSize() {
return pack;
}
/**
* 得到壓縮比。
* @return 壓縮比
*/
public float getScale() {
return scale;
}
/**
* 得到最后修改日期。
* @return 最后修改日期
*/
public Date getModifyTime() {
return modifyTime;
}
/**
* 判斷兩個(gè)記錄是否是同一個(gè)記錄。
* @param obj 要進(jìn)行比較的另一個(gè)對(duì)象
* @return 如果是同一類型并且私有entry成員相等則返回true,其他情況都返回false
*/
public boolean equals(Object obj) {
if (! (obj instanceof JZJFileRecord)) {
return false;
}
return entry.equals( ( (JZJFileRecord) obj).entry);
}
/**
* 返回記錄的hashcode,主要是為了和equals方法匹配。
* 如果equals方法返回true,那么本方法返回的hashcode應(yīng)該相同。
* @return 記錄的hashcode。
*/
public int hashCode() {
return entry.hashCode();
}
/**
* 得到數(shù)據(jù)的列數(shù)。
* @return 數(shù)據(jù)的列數(shù)
*/
public int getCount() {
return COUNT;
}
/**
* 得到指定列的值。
* @param column 列
* @return 指定列的值
*/
public Object get(int column) {
if (properties.containsKey(columnNames[column])) {
return properties.get(columnNames[column]);
}
else {
return "";
}
}
/**
* 設(shè)置指定列的值。
* 目前不支持此方法,調(diào)用時(shí)會(huì)拋出UnsupportedOperationException。
* @param column 列
* @param value 值
*/
public void set(int column, Object value) {
throw new UnsupportedOperationException();
}
/**
* 得到指定列的列名。
* @param column 列
* @return 對(duì)應(yīng)的列名
*/
public String getColumnName(int column) {
return columnNames[column];
}
/**
* 得到指定列的索引。
* 不存在時(shí)返回-1。
* @param columnName 列名
* @return 對(duì)應(yīng)的索引
*/
public int getColumnIndex(String columnName) {
return ArrayUtil.indexOf(columnNames, columnName);
}
/**
* 得到全部列名的數(shù)組,按照位置排序。
* @return 全部列名的數(shù)組
*/
public String[] getColumnNames() {
return columnNames;
}
/**
* 得到指定列所屬的類。
* @param column 列
* @return 列所屬的類
*/
public static Class getColumnClass(int column) {
return columnClasses[column];
}
/**
* 根據(jù)比較關(guān)鍵字進(jìn)行比較
* @param other 要比較的另一個(gè)對(duì)象
* @param key 比較關(guān)鍵字
* @return 根據(jù)比較關(guān)鍵字進(jìn)行比較的結(jié)果,大于時(shí)返回值大于0,相等時(shí)返回0,小于時(shí)返回值小于0
*/
public int compareTo(Object other, int key) {
return compareTo( (JZJFileRecord) other, key);
}
/**
* 根據(jù)比較關(guān)鍵字進(jìn)行比較
* @param other 要比較的另一個(gè)對(duì)象
* @param key 比較關(guān)鍵字
* @return 根據(jù)比較關(guān)鍵字進(jìn)行比較的結(jié)果,大于時(shí)返回值大于0,相等時(shí)返回0,小于時(shí)返回值小于0
*/
public int compareTo(JZJFileRecord other, int key) {
int result = 0;
switch (key) {
case NAME:
case TYPE:
case PATH:
result = ( (String) get(key)).compareToIgnoreCase( (String) other.get(
key));
break;
case SIZE:
case PACK:
result = ( (Long) get(key)).compareTo(other.get(key));
break;
case SCALE:
result = ( (Float) get(key)).compareTo(other.get(key));
break;
case TIME:
result = ( (Date) get(key)).compareTo(other.get(key));
break;
default:
result = 0;
}
/*if (result==0) {
return compareAll(other);
}*/
return result;
}
/**
* 以name為比較主鍵進(jìn)行比較
* @param o 另一個(gè)對(duì)象
* @return 根據(jù)比較關(guān)鍵字進(jìn)行比較的結(jié)果,大于時(shí)返回值大于0,相等時(shí)返回0,小于時(shí)返回值小于0
*/
public int compareTo(Object o) {
return compareAll( (JZJFileRecord) o);
}
/**
* 以name為比較主鍵進(jìn)行比較
* @param o 另一個(gè)對(duì)象
* @return 根據(jù)比較關(guān)鍵字進(jìn)行比較的結(jié)果,大于時(shí)返回值大于0,相等時(shí)返回0,小于時(shí)返回值小于0
*/
public int compareTo(JZJFileRecord o) {
return compareAll(o);
}
private int compareAll(JZJFileRecord o) {
int result = 0;
result = ( (String) get(NAME)).compareTo(o.get(NAME));
if (result != 0) {
return result;
}
result = ( (String) get(SIZE)).compareTo(o.get(SIZE));
if (result != 0) {
return result;
}
result = ( (String) get(PACK)).compareTo(o.get(PACK));
if (result != 0) {
return result;
}
result = ( (String) get(SCALE)).compareTo(o.get(SCALE));
if (result != 0) {
return result;
}
result = ( (String) get(TIME)).compareTo(o.get(TIME));
if (result != 0) {
return result;
}
result = ( (String) get(TYPE)).compareTo(o.get(TYPE));
if (result != 0) {
return result;
}
result = ( (String) get(PATH)).compareTo(o.get(PATH));
if (result != 0) {
return result;
}
return 0;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -