kk.jar的目錄結構如下
+kk.jar
??? +META-INF
??????? MANIFEST.MF
??? +config
??????? database.properties
目標:讀取database.properties中的參數信息
types=mysql
mysql.url=jdbc:mysql://127.0.0.1:3306/tjtz
mysql.user=root
mysql.password=root
mysql.driver=com.mysql.jdbc.Driver
mysql.maxCounts=5
代碼如下:
/*
* @(#)JarFileReader.java Oct 9, 2008
*
* Copyright (c) 2008 by jadmin. All Rights Reserved.
*/
package file.jar;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.Set;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
/**
* 從jar包中讀取配置文件信息
*
* @author <a href="mailto:jadmin@yeah.net">jadmin</a>
* @version 1.00 Oct 9, 2008 1:10:44 AM
*/
public class JarReader {
public static void main(String[] args) {
?? String jarPath = "C:\\Documents and Settings\\Administrator\\桌面\\新建文件夾\\kk.jar";
?? String entryFile = "config/database.properties";
?? doRead(jarPath,entryFile);
}
public static void doRead(String jarPath, String entryFile) {
?? try {
??? JarFile jarFile = new JarFile(jarPath);
??? JarEntry entry = jarFile.getJarEntry(entryFile);
??? InputStream input = jarFile.getInputStream(entry);
??? process(input);
??? jarFile.close();
?? } catch (IOException e) {
??? e.printStackTrace();
?? }
}
private static void process(InputStream input) {
?? Properties p = new Properties();
?? try {
??? p.load(input);
??? Set<?> set = p.keySet();
??? for (Object name : set)
???? System.out.println(name + "=" + p.getProperty((String) name));
?? } catch (IOException e) {
??? e.printStackTrace();
?? }
}
}
運行結果如下:
1.清濁并吞:水在流動時不管清水、濁水皆能加以并合,由此松下幸之助領悟出人或企業在成長、學習的過程中應去面對各種可能的挑戰,而非去等待好的時機。因為,如果 任何事情皆要挑好天氣、好機會、好環境的話,那終將只能留在原地,毫無機會。所以, “清濁并吞”即是告訴我們在任何環境下,皆需讓自己有勇氣下決心開始去學習,開始去做,就如同經濟有景氣、有不景氣,人生亦本就有起有伏,重要的是當下的即知即行,而非等待和觀望。
2.隨方亦圓:水在任何容器中皆可依容器之形狀而呈現出不同形狀的風貌,不管我們如何的擺弄它,它永遠能展現出其最好的一面,人在學習、成長的環境中亦同,處逆境時應下更大的決心,處順境時應更謙虛的學習,就像水的這種精神,在不同的環境中要能去適應環境、調適自己,去學習不同的東西和感受,給自己的人生或企業的未來下一個目標,然后去做它,不能自我設限,自我定型,而是不管在什幺情形下,皆能去適應它、去調適、去面對它、去克服這些環境,那終將有一番不同的成就。
?。常喜ㄏ蚂o:水在表面上雖是波浪起伏,但在水面下卻是平靜無波的。松下幸之助由此領悟出,事業就是要做扎根的工作,根扎得穩,事業才會穩固,事業若建構于沙灘之上,則波浪一來必毀于瞬間。因此,人或企業應學習水的這種精神,努力的去做扎根的工作,懷著單一的思想,專注、持續的去學習、去做,一定會有所體會和成就,否則,隨波逐流,沒有定位,在三心二意與三分鐘熱度的情況下,終將一事無成。
4.變化無窮:水存在著各種不同的型態,例如以水、水蒸氣、雨水,冰塊等不同的方式存在著,它在不同情況下會有不同的轉化。松下幸之助又領悟出,做事業亦同,市場上的 變化無窮盡,遇到的人亦是形形色色的。但我們想想,為什幺有些事業做得那幺成功,有些人亦是那么成功?!成功的抉擇到底何在呢?關鍵在于自己。因為,市場和人生乃是變化無窮的,需要有彈性去適應,就如同人在雨天時就應撐傘 ,企業在低潮、不景氣時,就應調整策略,而非一成不變,僵化無以應變。事實上,人總是喜歡趨吉避兇,但奇怪的是卻又喜歡聽消極的事,因此,人的思想,企業文化乃是在面對變化無窮的環境時,能否成功的關鍵,挑戰一定是有的,因難也一定是有的,但是成功的定律卻是不變的,如何識人,如何保持彈性便是在面對各種狀況時所應具備的。
?。担疂B透擴散:水具有滲透、擴散的能力,這是許多東西所無法辦到的能力。人生的成長、學習過程亦應像水一樣,目標要不斷的提升和提高,才能讓自己有更多的收獲;就如同水一樣,潑到地上便馬上讓干的地面逐漸地變成濕的地面,不斷的滲透、擴散。而設定目標的式是目標須較自己的能力高一些,方能不斷自我挑戰和成長。因為如果你有登峰攀頂的能力,為何要把目光停留在半山腰呢?
6.久儲必臭:水靜置放著,一段時日后自然會發臭。松下幸之助體會到他經營這幺大的事業,如果沒有讓自己再去學習、成長,那幺一定會落伍,所以須學習水一樣不斷的去流動,而非靜止在那邊。故學習是無止境的,惟有不斷的去學習、去努力,才有未來可言;對任一個想要成功的人或企業皆是如此,如果連松下幸之助這樣的經營神都有這樣的體會,那我們更應該努力的去學習。畢竟,人生或事業乃是不進則退的,因此須讓自己像水一樣,不斷的去流動才會有量,才不致“久儲臭”。
?。罚绷鞒吻澹核骱芸斓牡胤?,水一定特別干凈;就如同瀑布之頭,因水流湍急,所以水一定是澄清的。松下幸之助亦因此體會到人生的成長不能像小的水流一樣慢慢地流,他說慢慢的流雖不致發臭,但卻不會澄澈,須像急流一樣,水的力量大,又會清淯。因此在人生、事業的成長上要給自己壓力,就如同急流而下的高速水流產生強大的力量一般,惟有透過自我要求,方能產生完成目標的力量。
?。福嬷翆殻喝巳羧彼畡t必無法生存,所以水是生存至寶。同樣地,我們在自己的人生中,亦是扮演著很重要的角色;我們每一個人都是造物主最大的奇跡,因為在世界上,我們每一個人都是獨一無二的,是沒有任何人可以取代的。因此,我們自己須下最大的決心,對于自己的人生和目標有時間、計劃性的努力,則必會完成自己的人生,成就一生的事業
JTable是Swing編程中很常用的控件,這里總結了一些常用方法以備查閱.
一.創建表格控件的各種方式:
1) 調用無參構造函數.
JTable table = new JTable();
2) 以表頭和表數據創建表格.
Object[][] cellData = {{"row1-col1", "row1-col2"},{"row2-col1", "row2-col2"}};
String[] columnNames = {"col1", "col2"};
???
JTable table = new JTable(cellData, columnNames);
3) 以表頭和表數據創建表格,并且讓表單元格不可改.
String[] headers = { "表頭一", "表頭二", "表頭三" };
Object[][] cellData = null;
DefaultTableModel model = new DefaultTableModel(cellData, headers) {
public boolean isCellEditable(int row, int column) {
??? return false;
}
};
table = new JTable(model);
二.對表格列的控制
1) 設置列不可隨容器組件大小變化自動調整寬度.
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
2) 限制某列的寬度.
TableColumn firsetColumn = table.getColumnModel().getColumn(0);
firsetColumn.setPreferredWidth(30);
firsetColumn.setMaxWidth(30);
firsetColumn.setMinWidth(30);
3) 設置當前列數.
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
int count=5;
tableModel.setColumnCount(count);
4) 取得表格列數
int cols = table.getColumnCount();
5) 添加列
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
tableModel.addColumn("新列名");
6) 刪除列
table.removeColumn(table.getColumnModel().getColumn(columnIndex));// columnIndex是要刪除的列序號
三.對表格行的控制
1) 設置行高
table.setRowHeight(20);
2) 設置當前航數
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
int n=5;
tableModel.setRowCount(n);
3) 取得表格行數
int rows = table.getRowCount();
4) 添加表格行
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
tableModel.addRow(new Object[]{"sitinspring", "35", "Boss"});
5) 刪除表格行
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
model.removeRow(rowIndex);// rowIndex是要刪除的行序號
四.存取表格單元格的數據
1) 取單元格數據
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
String cellValue=(String) tableModel.getValueAt(row, column);// 取單元格數據,row是行號,column是列號
2) 填充數據到表格.
注:數據是Member類型的鏈表,Member類如下:
public class Member{
??? // 名稱
??? private String name;
???
??? // 年齡
??? private String age;
???
??? // 職務
??? private String title;
}
填充數據的代碼:
public void fillTable(List<Member> members){
DefaultTableModel tableModel = (DefaultTableModel) table
.getModel();
tableModel.setRowCount(0);// 清除原有行
// 填充數據
for(Member member:members){
??? String[] arr=new String[3];
??? arr[0]=member.getName();
??? arr[1]=member.getAge();
??? arr[2]=member.getTitle();
???
??? // 添加數據到表格
??? tableModel.addRow(arr);
}
// 更新表格
table.invalidate();
}
2) 取得表格中的數據
public List<Member> getShowMembers(){
List<Member> members=new ArrayList<Member>();
DefaultTableModel tableModel = (DefaultTableModel) table
.getModel();
int rowCount=tableModel.getRowCount();
for(int i=0;i<rowCount;i++){
??? Member member=new Member();
???
??? member.setName((String)tableModel.getValueAt(i, 0));// 取得第i行第一列的數據
??? member.setAge((String)tableModel.getValueAt(i, 1));// 取得第i行第二列的數據
??? member.setTitle((String)tableModel.getValueAt(i, 2));// 取得第i行第三列的數據
???
??? members.add(member);
}
return members;
}
五.取得用戶所選的行
1) 取得用戶所選的單行
int selectRows=table.getSelectedRows().length;// 取得用戶所選行的行數
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
if(selectRows==1){
int selectedRowIndex = table.getSelectedRow(); // 取得用戶所選單行
.// 進行相關處理
}
2) 取得用戶所選的多行
int selectRows=table.getSelectedRows().length;// 取得用戶所選行的行數
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
if(selectRows>1)
int[] selRowIndexs=table.getSelectedRows();// 用戶所選行的序列
for(int i=0;i<selRowIndexs.length;i++){
??? // 用tableModel.getValueAt(row, column)取單元格數據
??? String cellValue=(String) tableModel.getValueAt(i, 1);
}
}
六.添加表格的事件處理
view.getTable().addMouseListener(new MouseListener() {
public void mousePressed(MouseEvent e) {
??? // 鼠標按下時的處理
}
public void mouseReleased(MouseEvent e) {
??? // 鼠標松開時的處理
}
public void mouseEntered(MouseEvent e) {
??? // 鼠標進入表格時的處理
}
public void mouseExited(MouseEvent e) {
??? // 鼠標退出表格時的處理
}
public void mouseClicked(MouseEvent e) {
??? // 鼠標點擊時的處理
}
});
MAGIC #1:
???????? 一個印度人發現的,沒有人可以在電腦的任何地方建立一個名為"CON"的文件夾 。微軟公司的全體職員沒有一個人能解釋這是為什么;
這個的解釋是在Windows里不能以設備名來命名文件或文件夾,aux、com1、prn、con、nul等,這些都是系統保留的名稱
MAGIC #2:
???????? 在電腦上照著這個做:1.新建一個空的文本文檔?????? 2.在里面輸入"Bush hid the facts"(不要引號,可復制進去)?? 3.關閉文檔,再打開文檔。 發生了什么?
???????? 這個我在做的時候試過把Bush改成其他英文名字,結果就會有點點不一樣,大家們探索一下吧!
這個就不知道了
MAGIC #3:
???????? 這是最酷也是最不可思議的一個。。。打開一個新的Word,在里面輸入=rand (200, 99) ,之后按Enter。。。。自己看吧@ 這個據說連比爾蓋茨也解釋不清楚@
第一步: 準備工作,建立個tabedit.html
里面的內容很簡單, 建立個5X5的表格, 代碼如下:
apache的commons項目下有個email子項目,它對JavaMail API進行了封裝,用起來特變方便。在開始之前,需要做以下準備:
1、JavaMail API
添加JavaMail API里的mail包到CLASSPATH里,JavaMail API下載地址:http://java.sun.com/products/javamail/downloads/index.html
2、commons email
下載地址:http://www.apache.org/dist/commons/email/
工程目錄結構如下:
以下給出兩個簡單示例程序
// SendMail.java 使用SimpleEmail發郵件
package com.apache.commons.email.demo;
import org.apache.commons.mail.SimpleEmail;
public class SendMail
{
??? public static void main ( String[] arg ) throws Exception
??? {
??? // 使用SimpleEmail對于中文內容,可能會產生亂碼
??????? SimpleEmail email = new SimpleEmail ( );
??????? // SMTP服務器名
??????? email.setHostName ( "smtp.163.com" );
??????? // 登陸郵件服務器的用戶名和密碼
??????? email.setAuthentication ( "peki", "123456" );
??????? // 接收人
??????? email.addTo ( "jstio@qq.com", "曦勤" );
??????? // 發送人
??????? email.setFrom ( "peki@163.com", "小陳" );
??????? // 標題
??????? email.setSubject ( "Test message" );
??????? // 郵件內容
??????? email.setMsg ( "This is a simple test of commons-email<br>我是小陳" );
??????? // 發送
??????? email.send ( );
???????
??????? System.out.println ( "Send email successful!" );
??? }
}
收信結果如下:
This is a simple test of commons-email<br>????
有亂碼產生,并且html內容沒有正常顯示
// MailSender.java?? 使用HtmlEmail發郵件
package com.apache.commons.email.demo;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
public class MailSender {
public static void main(String[] args) {
?? // 不要使用SimpleEmail,會出現亂碼問題
?? HtmlEmail email = new HtmlEmail();
?? try {
??? // 這里是SMTP發送服務器的名字:,163的如下:
??? email.setHostName("smtp.163.com");
??? // 字符編碼集的設置
??? email.setCharset("gbk");
??? // 收件人的郵箱
??? email.addTo("jstio@qq.com");
??? // 發送人的郵箱
??? email.setFrom("peki@163.com", "小陳");
??? // 如果需要認證信息的話,設置認證:用戶名-密碼。分別為發件人在郵件服務器上的注冊名稱和密碼
??? email.setAuthentication("peki", "123456");
??? email.setSubject("下午3:00會議室討論,請準時參加");
??? // 要發送的信息,由于使用了HtmlEmail,可以在郵件內容中使用HTML標簽
??? email.setMsg("下午3:00會議室討論,請準時參加<BR>呵呵~!");
??? // 發送
??? email.send();
???
??? System.out.println ( "郵件發送成功!" );
?? } catch (EmailException e) {
??? // TODO Auto-generated catch block
??? e.printStackTrace();
??? System.out.println ( "郵件發送失敗!" );
?? }
}
}
收信結果如下:
下午3:00會議室討論,請準時參加
呵呵~!
沒有產生亂碼,html內容正常顯示
以上程序盡供參考,如需要在開發中使用,還得深入研究
1、我們在做驗證碼的時候往往由于要反作弊,驗證有時故意加入多的干擾因素,這時驗證碼顯示不很清楚,用戶經常輸入錯誤。這樣不但要重新刷新頁面,導致用戶沒有看清楚驗證碼而重填而不是修改,而且如果沒有用session保存下用戶輸入的其它數據的話(如姓名),用戶剛剛輸入的內容也不存在了,這樣給用戶造成不好的體驗。
2、本例在原有驗證方式基礎之上增加一段js,通過xmlhttp來獲取返回值,以此來驗證是否有效,這樣即使用戶瀏覽器不支持js,也不會影響他的正常使用了。
3、為了防止作弊,當用戶連接3次輸入錯誤時則重載一下圖片,這樣也利于用戶因為圖片上的驗證碼辨認不清而使其終無法輸入正確。
4、本例還特別適合檢驗用戶名是否有效,只要從后臺做個sql查詢,返回一個值或是xml即可。(這種例子太多 ,就在此不贅述了)。
5、本例的優點在于非常方便用戶輸入,而且減少對服務器端的請求,可以說既改善用戶體驗而且略會節省帶寬成本,但相應地要在頁面上增加一段JavaScript代碼,在目前網速越來越快人們要求便捷舒適的今天,似乎我們更應注意提供給用戶良好的使用感受。
代碼如下:
1、img.jsp,輸入主頁面