?? jzjfilerecord.java
字號:
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.*;
/**
* 壓縮文件的一個記錄項的抽象。
* 根據區域設置其時間以及文件大小的表示方式,記錄的屬性用一個HashMap維護,這樣便于進行屬性的擴展。
* 這個類實際上是一個工具類,將一個ZipEntry的信息進行解析。
*/
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;
}
/**
* 構造方法,在完成初始化的同時讀取記錄的所有屬性。
* @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();
}
/**
* 解析文件相關的屬性:文件名,擴展名,根目錄以及路徑。
*/
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));
}
/**
* 解析最后一次修改時間。
*/
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;
}
/**
* 判斷兩個記錄是否是同一個記錄。
* @param obj 要進行比較的另一個對象
* @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應該相同。
* @return 記錄的hashcode。
*/
public int hashCode() {
return entry.hashCode();
}
/**
* 得到數據的列數。
* @return 數據的列數
*/
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 "";
}
}
/**
* 設置指定列的值。
* 目前不支持此方法,調用時會拋出UnsupportedOperationException。
* @param column 列
* @param value 值
*/
public void set(int column, Object value) {
throw new UnsupportedOperationException();
}
/**
* 得到指定列的列名。
* @param column 列
* @return 對應的列名
*/
public String getColumnName(int column) {
return columnNames[column];
}
/**
* 得到指定列的索引。
* 不存在時返回-1。
* @param columnName 列名
* @return 對應的索引
*/
public int getColumnIndex(String columnName) {
return ArrayUtil.indexOf(columnNames, columnName);
}
/**
* 得到全部列名的數組,按照位置排序。
* @return 全部列名的數組
*/
public String[] getColumnNames() {
return columnNames;
}
/**
* 得到指定列所屬的類。
* @param column 列
* @return 列所屬的類
*/
public static Class getColumnClass(int column) {
return columnClasses[column];
}
/**
* 根據比較關鍵字進行比較
* @param other 要比較的另一個對象
* @param key 比較關鍵字
* @return 根據比較關鍵字進行比較的結果,大于時返回值大于0,相等時返回0,小于時返回值小于0
*/
public int compareTo(Object other, int key) {
return compareTo( (JZJFileRecord) other, key);
}
/**
* 根據比較關鍵字進行比較
* @param other 要比較的另一個對象
* @param key 比較關鍵字
* @return 根據比較關鍵字進行比較的結果,大于時返回值大于0,相等時返回0,小于時返回值小于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為比較主鍵進行比較
* @param o 另一個對象
* @return 根據比較關鍵字進行比較的結果,大于時返回值大于0,相等時返回0,小于時返回值小于0
*/
public int compareTo(Object o) {
return compareAll( (JZJFileRecord) o);
}
/**
* 以name為比較主鍵進行比較
* @param o 另一個對象
* @return 根據比較關鍵字進行比較的結果,大于時返回值大于0,相等時返回0,小于時返回值小于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;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -