kk.jar的目錄結(jié)構(gòu)如下
+kk.jar
??? +META-INF
??????? MANIFEST.MF
??? +config
??????? database.properties
目標:讀取database.properties中的參數(shù)信息
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();
?? }
}
}
運行結(jié)果如下:
1.清濁并吞:水在流動時不管清水、濁水皆能加以并合,由此松下幸之助領(lǐng)悟出人或企業(yè)在成長、學(xué)習(xí)的過程中應(yīng)去面對各種可能的挑戰(zhàn),而非去等待好的時機。因為,如果 任何事情皆要挑好天氣、好機會、好環(huán)境的話,那終將只能留在原地,毫無機會。所以, “清濁并吞”即是告訴我們在任何環(huán)境下,皆需讓自己有勇氣下決心開始去學(xué)習(xí),開始去做,就如同經(jīng)濟有景氣、有不景氣,人生亦本就有起有伏,重要的是當(dāng)下的即知即行,而非等待和觀望。
2.隨方亦圓:水在任何容器中皆可依容器之形狀而呈現(xiàn)出不同形狀的風(fēng)貌,不管我們?nèi)绾蔚臄[弄它,它永遠能展現(xiàn)出其最好的一面,人在學(xué)習(xí)、成長的環(huán)境中亦同,處逆境時應(yīng)下更大的決心,處順境時應(yīng)更謙虛的學(xué)習(xí),就像水的這種精神,在不同的環(huán)境中要能去適應(yīng)環(huán)境、調(diào)適自己,去學(xué)習(xí)不同的東西和感受,給自己的人生或企業(yè)的未來下一個目標,然后去做它,不能自我設(shè)限,自我定型,而是不管在什幺情形下,皆能去適應(yīng)它、去調(diào)適、去面對它、去克服這些環(huán)境,那終將有一番不同的成就。
3.上波下靜:水在表面上雖是波浪起伏,但在水面下卻是平靜無波的。松下幸之助由此領(lǐng)悟出,事業(yè)就是要做扎根的工作,根扎得穩(wěn),事業(yè)才會穩(wěn)固,事業(yè)若建構(gòu)于沙灘之上,則波浪一來必毀于瞬間。因此,人或企業(yè)應(yīng)學(xué)習(xí)水的這種精神,努力的去做扎根的工作,懷著單一的思想,專注、持續(xù)的去學(xué)習(xí)、去做,一定會有所體會和成就,否則,隨波逐流,沒有定位,在三心二意與三分鐘熱度的情況下,終將一事無成。
4.變化無窮:水存在著各種不同的型態(tài),例如以水、水蒸氣、雨水,冰塊等不同的方式存在著,它在不同情況下會有不同的轉(zhuǎn)化。松下幸之助又領(lǐng)悟出,做事業(yè)亦同,市場上的 變化無窮盡,遇到的人亦是形形色色的。但我們想想,為什幺有些事業(yè)做得那幺成功,有些人亦是那么成功?!成功的抉擇到底何在呢?關(guān)鍵在于自己。因為,市場和人生乃是變化無窮的,需要有彈性去適應(yīng),就如同人在雨天時就應(yīng)撐傘 ,企業(yè)在低潮、不景氣時,就應(yīng)調(diào)整策略,而非一成不變,僵化無以應(yīng)變。事實上,人總是喜歡趨吉避兇,但奇怪的是卻又喜歡聽消極的事,因此,人的思想,企業(yè)文化乃是在面對變化無窮的環(huán)境時,能否成功的關(guān)鍵,挑戰(zhàn)一定是有的,因難也一定是有的,但是成功的定律卻是不變的,如何識人,如何保持彈性便是在面對各種狀況時所應(yīng)具備的。
5.滲透擴散:水具有滲透、擴散的能力,這是許多東西所無法辦到的能力。人生的成長、學(xué)習(xí)過程亦應(yīng)像水一樣,目標要不斷的提升和提高,才能讓自己有更多的收獲;就如同水一樣,潑到地上便馬上讓干的地面逐漸地變成濕的地面,不斷的滲透、擴散。而設(shè)定目標的式是目標須較自己的能力高一些,方能不斷自我挑戰(zhàn)和成長。因為如果你有登峰攀頂?shù)哪芰Γ瑸楹我涯抗馔A粼诎肷窖兀?/p>
6.久儲必臭:水靜置放著,一段時日后自然會發(fā)臭。松下幸之助體會到他經(jīng)營這幺大的事業(yè),如果沒有讓自己再去學(xué)習(xí)、成長,那幺一定會落伍,所以須學(xué)習(xí)水一樣不斷的去流動,而非靜止在那邊。故學(xué)習(xí)是無止境的,惟有不斷的去學(xué)習(xí)、去努力,才有未來可言;對任一個想要成功的人或企業(yè)皆是如此,如果連松下幸之助這樣的經(jīng)營神都有這樣的體會,那我們更應(yīng)該努力的去學(xué)習(xí)。畢竟,人生或事業(yè)乃是不進則退的,因此須讓自己像水一樣,不斷的去流動才會有量,才不致“久儲臭”。
7.急流澄清:水流很快的地方,水一定特別干凈;就如同瀑布之頭,因水流湍急,所以水一定是澄清的。松下幸之助亦因此體會到人生的成長不能像小的水流一樣慢慢地流,他說慢慢的流雖不致發(fā)臭,但卻不會澄澈,須像急流一樣,水的力量大,又會清淯。因此在人生、事業(yè)的成長上要給自己壓力,就如同急流而下的高速水流產(chǎn)生強大的力量一般,惟有透過自我要求,方能產(chǎn)生完成目標的力量。
8.生存至寶:人若缺水則必?zé)o法生存,所以水是生存至寶。同樣地,我們在自己的人生中,亦是扮演著很重要的角色;我們每一個人都是造物主最大的奇跡,因為在世界上,我們每一個人都是獨一無二的,是沒有任何人可以取代的。因此,我們自己須下最大的決心,對于自己的人生和目標有時間、計劃性的努力,則必會完成自己的人生,成就一生的事業(yè)
JTable是Swing編程中很常用的控件,這里總結(jié)了一些常用方法以備查閱.
一.創(chuàng)建表格控件的各種方式:
1) 調(diào)用無參構(gòu)造函數(shù).
JTable table = new JTable();
2) 以表頭和表數(shù)據(jù)創(chuàng)建表格.
Object[][] cellData = {{"row1-col1", "row1-col2"},{"row2-col1", "row2-col2"}};
String[] columnNames = {"col1", "col2"};
???
JTable table = new JTable(cellData, columnNames);
3) 以表頭和表數(shù)據(jù)創(chuàng)建表格,并且讓表單元格不可改.
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) 設(shè)置列不可隨容器組件大小變化自動調(diào)整寬度.
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
2) 限制某列的寬度.
TableColumn firsetColumn = table.getColumnModel().getColumn(0);
firsetColumn.setPreferredWidth(30);
firsetColumn.setMaxWidth(30);
firsetColumn.setMinWidth(30);
3) 設(shè)置當(dāng)前列數(shù).
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
int count=5;
tableModel.setColumnCount(count);
4) 取得表格列數(shù)
int cols = table.getColumnCount();
5) 添加列
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
tableModel.addColumn("新列名");
6) 刪除列
table.removeColumn(table.getColumnModel().getColumn(columnIndex));// columnIndex是要刪除的列序號
三.對表格行的控制
1) 設(shè)置行高
table.setRowHeight(20);
2) 設(shè)置當(dāng)前航數(shù)
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
int n=5;
tableModel.setRowCount(n);
3) 取得表格行數(shù)
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是要刪除的行序號
四.存取表格單元格的數(shù)據(jù)
1) 取單元格數(shù)據(jù)
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
String cellValue=(String) tableModel.getValueAt(row, column);// 取單元格數(shù)據(jù),row是行號,column是列號
2) 填充數(shù)據(jù)到表格.
注:數(shù)據(jù)是Member類型的鏈表,Member類如下:
public class Member{
??? // 名稱
??? private String name;
???
??? // 年齡
??? private String age;
???
??? // 職務(wù)
??? private String title;
}
填充數(shù)據(jù)的代碼:
public void fillTable(List<Member> members){
DefaultTableModel tableModel = (DefaultTableModel) table
.getModel();
tableModel.setRowCount(0);// 清除原有行
// 填充數(shù)據(jù)
for(Member member:members){
??? String[] arr=new String[3];
??? arr[0]=member.getName();
??? arr[1]=member.getAge();
??? arr[2]=member.getTitle();
???
??? // 添加數(shù)據(jù)到表格
??? tableModel.addRow(arr);
}
// 更新表格
table.invalidate();
}
2) 取得表格中的數(shù)據(jù)
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行第一列的數(shù)據(jù)
??? member.setAge((String)tableModel.getValueAt(i, 1));// 取得第i行第二列的數(shù)據(jù)
??? member.setTitle((String)tableModel.getValueAt(i, 2));// 取得第i行第三列的數(shù)據(jù)
???
??? members.add(member);
}
return members;
}
五.取得用戶所選的行
1) 取得用戶所選的單行
int selectRows=table.getSelectedRows().length;// 取得用戶所選行的行數(shù)
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
if(selectRows==1){
int selectedRowIndex = table.getSelectedRow(); // 取得用戶所選單行
.// 進行相關(guān)處理
}
2) 取得用戶所選的多行
int selectRows=table.getSelectedRows().length;// 取得用戶所選行的行數(shù)
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
if(selectRows>1)
int[] selRowIndexs=table.getSelectedRows();// 用戶所選行的序列
for(int i=0;i<selRowIndexs.length;i++){
??? // 用tableModel.getValueAt(row, column)取單元格數(shù)據(jù)
??? 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:
???????? 一個印度人發(fā)現(xiàn)的,沒有人可以在電腦的任何地方建立一個名為"CON"的文件夾 。微軟公司的全體職員沒有一個人能解釋這是為什么;
這個的解釋是在Windows里不能以設(shè)備名來命名文件或文件夾,aux、com1、prn、con、nul等,這些都是系統(tǒng)保留的名稱
MAGIC #2:
???????? 在電腦上照著這個做:1.新建一個空的文本文檔?????? 2.在里面輸入"Bush hid the facts"(不要引號,可復(fù)制進去)?? 3.關(guān)閉文檔,再打開文檔。 發(fā)生了什么?
???????? 這個我在做的時候試過把Bush改成其他英文名字,結(jié)果就會有點點不一樣,大家們探索一下吧!
這個就不知道了
MAGIC #3:
???????? 這是最酷也是最不可思議的一個。。。打開一個新的Word,在里面輸入=rand (200, 99) ,之后按Enter。。。。自己看吧@ 這個據(jù)說連比爾蓋茨也解釋不清楚@
第一步: 準備工作,建立個tabedit.html
里面的內(nèi)容很簡單, 建立個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/
工程目錄結(jié)構(gòu)如下:
以下給出兩個簡單示例程序
// SendMail.java 使用SimpleEmail發(fā)郵件
package com.apache.commons.email.demo;
import org.apache.commons.mail.SimpleEmail;
public class SendMail
{
??? public static void main ( String[] arg ) throws Exception
??? {
??? // 使用SimpleEmail對于中文內(nèi)容,可能會產(chǎn)生亂碼
??????? SimpleEmail email = new SimpleEmail ( );
??????? // SMTP服務(wù)器名
??????? email.setHostName ( "smtp.163.com" );
??????? // 登陸郵件服務(wù)器的用戶名和密碼
??????? email.setAuthentication ( "peki", "123456" );
??????? // 接收人
??????? email.addTo ( "jstio@qq.com", "曦勤" );
??????? // 發(fā)送人
??????? email.setFrom ( "peki@163.com", "小陳" );
??????? // 標題
??????? email.setSubject ( "Test message" );
??????? // 郵件內(nèi)容
??????? email.setMsg ( "This is a simple test of commons-email<br>我是小陳" );
??????? // 發(fā)送
??????? email.send ( );
???????
??????? System.out.println ( "Send email successful!" );
??? }
}
收信結(jié)果如下:
This is a simple test of commons-email<br>????
有亂碼產(chǎn)生,并且html內(nèi)容沒有正常顯示
// MailSender.java?? 使用HtmlEmail發(fā)郵件
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,會出現(xiàn)亂碼問題
?? HtmlEmail email = new HtmlEmail();
?? try {
??? // 這里是SMTP發(fā)送服務(wù)器的名字:,163的如下:
??? email.setHostName("smtp.163.com");
??? // 字符編碼集的設(shè)置
??? email.setCharset("gbk");
??? // 收件人的郵箱
??? email.addTo("jstio@qq.com");
??? // 發(fā)送人的郵箱
??? email.setFrom("peki@163.com", "小陳");
??? // 如果需要認證信息的話,設(shè)置認證:用戶名-密碼。分別為發(fā)件人在郵件服務(wù)器上的注冊名稱和密碼
??? email.setAuthentication("peki", "123456");
??? email.setSubject("下午3:00會議室討論,請準時參加");
??? // 要發(fā)送的信息,由于使用了HtmlEmail,可以在郵件內(nèi)容中使用HTML標簽
??? email.setMsg("下午3:00會議室討論,請準時參加<BR>呵呵~!");
??? // 發(fā)送
??? email.send();
???
??? System.out.println ( "郵件發(fā)送成功!" );
?? } catch (EmailException e) {
??? // TODO Auto-generated catch block
??? e.printStackTrace();
??? System.out.println ( "郵件發(fā)送失敗!" );
?? }
}
}
收信結(jié)果如下:
下午3:00會議室討論,請準時參加
呵呵~!
沒有產(chǎn)生亂碼,html內(nèi)容正常顯示
以上程序盡供參考,如需要在開發(fā)中使用,還得深入研究
1、我們在做驗證碼的時候往往由于要反作弊,驗證有時故意加入多的干擾因素,這時驗證碼顯示不很清楚,用戶經(jīng)常輸入錯誤。這樣不但要重新刷新頁面,導(dǎo)致用戶沒有看清楚驗證碼而重填而不是修改,而且如果沒有用session保存下用戶輸入的其它數(shù)據(jù)的話(如姓名),用戶剛剛輸入的內(nèi)容也不存在了,這樣給用戶造成不好的體驗。
2、本例在原有驗證方式基礎(chǔ)之上增加一段js,通過xmlhttp來獲取返回值,以此來驗證是否有效,這樣即使用戶瀏覽器不支持js,也不會影響他的正常使用了。
3、為了防止作弊,當(dāng)用戶連接3次輸入錯誤時則重載一下圖片,這樣也利于用戶因為圖片上的驗證碼辨認不清而使其終無法輸入正確。
4、本例還特別適合檢驗用戶名是否有效,只要從后臺做個sql查詢,返回一個值或是xml即可。(這種例子太多 ,就在此不贅述了)。
5、本例的優(yōu)點在于非常方便用戶輸入,而且減少對服務(wù)器端的請求,可以說既改善用戶體驗而且略會節(jié)省帶寬成本,但相應(yīng)地要在頁面上增加一段JavaScript代碼,在目前網(wǎng)速越來越快人們要求便捷舒適的今天,似乎我們更應(yīng)注意提供給用戶良好的使用感受。
代碼如下:
1、img.jsp,輸入主頁面