
2008年12月18日
在 Windows 上離線安裝 Chrome
https://support.google.com/chrome/answer/126299?hl=zh-Hans
這里鏈接默認是32位的。
針對所有用戶安裝版64位完整鏈接為:
https://www.google.com/chrome/browser/desktop/index.html?system=true&standalone=1&platform=win64
Chorome快捷方式+SwitchyOmega
/Files/rox/chrome.7z
posted @
2016-05-21 20:52 rox 閱讀(423) |
評論 (0) |
編輯 收藏
參加了國內某知名快遞公司的面試,一面就放棄了
自己公司的一個HR經理也曾經教過要換位思考,現在簡單的介紹一下面試過程中的一些感想。
1. HR打電話的時候,問周六有沒有空?
問題:雖然是專場,但這是很多HR應該規避的,應該盡量說明這是公司的安排,這種周六加班不是企業文化。
建議:曾經遇到過的幾個HR都非常注意這一點,特別說明晚上和周末一般都不加班,雖然說HR多半都是騙子,呵呵!
2. 回答都有空,便安排在早晨的第二個時間段
問題:實際上安排了將近50人在早晨面試,可想而知,是面不完的。
現場有點貌似華為面試,只不過不是在食堂:D
11點左右HR一面,20分鐘,到了12點鐘,組織方開始發餐票,到隔壁快餐店用餐。
沒拿餐票,直接回家了。
建議:組織安排上,還算OK,但稍微比較有經驗和有能力的HR,應該不會做這樣的安排。
即使是新項目啟動,采取這樣方式海招,風險比較大,應該是一個相對長期的過程,可以把招聘過程安排的相對寬松點。
在公司,自己也做技術面試,一般都會面半個小時到一個小時左右,連續面了兩個以上,精力和質量就會下降的很厲害。
3. 一面HR的內容,2分鐘介紹自己,同時看表,增加面試著的壓力。再問了工作和生活上的問題,還有技術問題!
問題:技術問題,比較有意思。
HR問,最近一年,業界都有那些新技術,回答了Android和iPhone,猜他是想問云計算(面試前調研過,該公司有一直想進電商行業)。
然后,HR再問Java方面有啥新技術,特意回答沒啥新的啊。這個后來被自己朋友批,不知道反問他么!
這時,HR就做出了一個重大的決定,準備開始對我的職位進行降級。問有沒有意向,直接否掉。
然后就說,各個公司的職位要求不一樣,該公司要求更高點,就結束談話,等待下一輪面試。
40分鐘后,開始發餐票。自己什么都沒說就走了,這個其實也是特意做的,后面會有解釋。
建議:面試20多分鐘,都是HR對面試者進行提問和定位,不留給對方了解相關項目的機會,這個很少見。
另外,很多初級HR只對項目里面說需要技術單詞比較敏感,往往會在面試的時候,就急于問,好進行準確定位。
但又怕問了以后會讓面試者對后面的技術面試有所準備,技巧啊,技巧啊!
另外:解釋一下自己沒領餐票直接走人,其實想看一下組織方會有哪些動作。
1. 發餐票的HR妹妹,啥也沒問,直接放走。一個已經等了將近三個小時面試者,卻不愿意再多等一個小時,沒有任何疑問。這種情況發生在自己公司,會被HR經理罵的。呵呵!
2. 負責一面的HR,大約在一個小時后的確給電話了,你在哪?自己說回家了,然后HR就說那下次有機會再聯系吧,就掛了。看來他真的很忙。呵呵!
也參與過自己公司的很多面試,接觸HR比較多,從HR經理那里也學到了不少東西,包括壓力測試(其實,面試者也可以多給HR一些壓力測試)。
感覺這個非常有意思,比和搞技術的打交道有意思。
把自己面試時的一些想法和技巧列出來。
可能還是太片面,而且帶著搞技術的那種“壞味道”。
只是希望能為大家提供一點點參考。
posted @
2013-07-28 11:53 rox 閱讀(216) |
評論 (0) |
編輯 收藏
前一家公司經理的思想是,設計好的系統是絕對不會出錯的。需要容錯,絕對是沒設計好。
這個似乎有道理,但完全不考慮,真正實際環境,是涉及到三方交易結算的的東西啊,真替他捏把汗。
現在的項目,一堆Oracle、騰訊、華為、證券摸爬滾打出來的技術精英,還包括一個純servlet+jdbc開源項目的作者湊一堆。
不懂Tomcat下為什么要配置filter轉碼,把這個和虛擬機編碼機制混為一談,最后感慨一句weblogic就沒這問題。
也有不懂啥是樂觀鎖的。
面試的時候,對集合類型及操作考的頭頭是道,但項目里,一個都沒用到。
項目中遇到問題,往往就是解決、解決+解決,不究其原理。
感覺自己像在做硬件拼裝的富士康。
牢騷兩句。
posted @
2013-07-21 23:19 rox 閱讀(297) |
評論 (0) |
編輯 收藏
安裝64位Ubuntu,方法其實解決方案很簡單,不用下載任何的ISO,只要去下載最新的64位包,見下面資源。
拷貝wubi.exe和下載好的ubuntu-12.04-wubi-amd64.tar.xz都拷貝到C盤
根目錄下,然后執行下面命令即可。
1 wubi.exe --dimagepath=c:\ubuntu-12.04-wubi-amd64.tar.xz
資源:
What is ubuntu-11.10-wubi-amd64.tar.xz ? wubi安裝Ubuntu11.**正確方法及無限等待下載amd64.tar.xz解決方法
posted @
2012-07-12 13:26 rox 閱讀(6542) |
評論 (4) |
編輯 收藏
參考了這篇the script is not working for any mvc framework中uri的回復,結合當前Uploadify的v2.1.4版,netbean 6.9.1下編寫調試。
● 新建grails工程,名為test,并把Uploadify-v2.1.4.zip解壓到web-app\uploadify目錄下。
● 新建grails控制器PictureController,代碼如下
package com.test
class PictureController {
def index = { redirect(action: "upload") }
def upload = { }
def savePicture = {
def files = request.getFileMap();
def path = "c:/test/" + files.get("Filedata").getOriginalFilename();
files.get("Filedata").transferTo( new File(path))
render (view:'upload')
}
}
|
● 新建grails視圖upload.gsp,代碼如下,注意粗體部分的上下文路徑
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>upload file sample</title>
<link rel="stylesheet" href="/test/uploadify/uploadify.css" type="text/css" />
<script type="text/javascript" src="/test/uploadify/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="/test/uploadify/swfobject.js"></script>
<script type="text/javascript" src="/test/uploadify/jquery.uploadify.v2.1.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#fileUpload").uploadify({
'uploader': '/test/uploadify/uploadify.swf',
'cancelImg': '/test/uploadify/cancel.png',
'script': '/test/picture/savePicture',
'folder': 'files',
'multi': true,
'buttonText': 'add',
'displayData': 'speed',
'simUploadLimit': 2
});
});
</script>
</head>
<body>
<hr width=100% size="1" color="" align="center">
<h2>Multiple File Upload</h2>
<p>checkScript, buttonText, simulataneous upload limit</p>
<div id="fileUpload">You have a problem with your javascript</div>
<a href="javascript:$('#fileUpload').uploadifyUpload()">Start Upload</a> | <a href="javascript:$('#fileUpload').uploadifyClearQueue()">Clear Queue</a>
<p></p>
</body>
</html>
|
● 運行工程,訪問http://localhost:8080/test/picture/upload
posted @
2010-12-06 15:38 rox 閱讀(1082) |
評論 (2) |
編輯 收藏
公司安排研究耶魯CAS單點登錄的實現,并研究了一下它的代理協議,看了N多文檔和代碼,才大概明白是怎么回事。
為了方便有興趣的朋友學習,去掉了HTTPS的加密,源代碼、webapp包和配置文件都有。
本來打算針對這個寫篇文章,不想寫了。
另:
- 針對cas-server-2.0.12和cas-client-2.0.11的
- ppt中部分內容是翻譯+自己理解的,中英文水平均有限,請諒解。
下載地址:
posted @
2010-04-14 17:41 rox 閱讀(608) |
評論 (2) |
編輯 收藏
posted @
2010-02-26 16:12 rox 閱讀(625) |
評論 (0) |
編輯 收藏
原帖地址:java開發的亂碼問題
第一,存文件必須以一種編碼存;讀文件也必須以一種編碼讀,如不特別設置,去系統默認的編碼,中文windows為GBK編碼。
從.java->.class過程是,先編寫.java文件并按莫種編碼方式保存,然后用javac方法編譯此文件,注意如.java沒按系統默認編碼保存則要帶encoding參數指明實際編碼,否則出錯,生成的.class文件存為系統默認編碼。
從.jsp->.java->.class,先存為某種編碼的.jsp文件,然后tomcat根據pageEncoding讀取并轉化為servlet存為系統默認編碼,然后同上面.java->.class過程。
第二,IDE的encoding為對系統下文件打開的解碼方式或保存的編碼方式。特例:如果.jsp文件有<%@ page language="java" pageEncoding="UTF-8"%>,則eclipse會自動存為UTF-8方式,不管eclipse的encoding是什么,這也是eclipse的聰明之處。
第三,
pageEncoding="UTF-8"表示此文件的編碼方式,必須與此文件存儲方式一致(所以eclipse會首選根據它來存文件),tomcat根據這個來讀此.jsp文件并編譯為servlet。
contentType="text/html;charset=UTF-8"表示當瀏覽器得到此文件時以什么方式解碼。例如:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=iso8859-1"%>
<html>
<head>
<title>test</title>
</head>
<body>
我是個好人
</body>
</html>
會產生亂碼,因為存為UTF-8的文件被解碼為iso8859-1,這樣 如有中文肯定出亂碼。
至此,頁面應為:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
<title>中文問題</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
</html>
第四,
request.setCharacterEncoding("UTF-8")是把提交內容的字符集設為UTF-8
response.setCharacterEncoding("UTF-8")可以把頁面中的<%@ page contentType="text/html;charset=iso8859-1"%>換為charset=UTF-8,是給告訴瀏覽器我這個文件的編碼方式。
第五,表單提交:無論何種表單提交都可以在后臺的java文件中通過String des = new String(s.getBytes("iso8859-1"),"UTF-8");來轉換成你想要的UTF-8編碼方式。但如果每處都加詞句太麻煩,故分post和get兩種方式區分提交(tomcat5以后分開處理,之前處理方式一樣,即都可以用request.setCharacterEncoding("UTF-8")方法處理,不過tomcat5以后get提交方法用此語句無效)。
1,post提交的數據:
程序加上org.springframework.web.filter.CharacterEncodingFilter過濾器.
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
因為規范要求瀏覽器提交數據都要用utf8編碼,所以這里設置編碼方式為UTF8.
特別注意:
a,這個過濾器只是簡單的調用:request.setCharacterEncoding(this.encoding);
在這個語句之前不能調用任何的request.getParameter()方法,否則會設置tomcat的缺省字符集為"ISO-8859-1",并且使setCharacterEncoding的調用失效.所以在這個過濾器之前的過濾器中不能有對getParameter這類方法的調用,比較安全的做法就是把這個過濾器盡量靠前放.
b,在server.xml中不能加上<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
這個value也設置tomcat的缺省字符集為"ISO-8859-1",使setCharacterEncoding的調用失效.可能其他的value也有這個問題,我沒有測試過.
如果要觀察http請求參數,可以考慮用過濾器或者其他工具,例如ethereal(http://www.ethereal.com/)
2,get提交的數據:
兩種情況:
a,如果從地址欄直接輸入漢字,則一般編碼為"GBK",需要用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出
b,如果是頁面超連接連接中帶的漢字,則編碼根據頁面編碼的不同而不同,如果頁面的
content="text/html; charset=utf-8",則在tomcat/conf/server.xml中的配置文件中:
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" />
加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正確內容.
如果content="text/html; charset=GBK",需用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出,其他情況類似.
總結:
1,所有頁面使用utf8編碼,
2,服務器加上過濾器,
3,server.xml中不要使用
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
4,server.xml文件加上useBodyEncodingForURI="true"
這樣應該可以搞定大多數前臺的中文問題.至于地址欄輸入中文,不支持也罷,一般的程序很少要求
從這里輸入.
第六,連接數據庫
1、mysql配置文件:
修改mysql在windowsmy.ini里default-character-set=utf-8
2、mysql里數據庫和表也都設為utf8_unicode_ci
3、數據庫連結:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
注意,關鍵就在于此:此句中間是'&'不是'&'這是因為數據庫連結時,在.jsp和.java文件中應該用&號,而XML文件中需要用&
posted @
2010-01-05 08:43 rox 閱讀(439) |
評論 (0) |
編輯 收藏
原帖:http://chenyaqiong81081.blog.163.com/blog/static/44622594200791235256255/
一、Runtime.getRuntime().exec()執行命令情況:
Runtime.getRuntime().exec("cmd /c your command")//2000
Runtime.getRuntime().exec("command /c your command")//98
Runtime.getRuntime().exec("sh/ your command")//linux
二、執行.sh文件的情況:
1、把命令寫成a.sh ;執行命令的時候
Process child = Runtime.getRuntime().exec("bash a.sh,null,new File("http://usr/local/mysql/bin/"));
child.waitFor();
........
2、Process child = Runtime.getRuntime().
exec(new String[] {"/bin/sh","-c","mysqldump -u root -p7788919 axtic_cg" },
null,
new File("/usr/local/mysql/bin/"));
child.waitFor();
注:waitFor()等待操作完成
posted @
2009-12-29 17:10 rox 閱讀(2863) |
評論 (0) |
編輯 收藏
摘要: Java多層目錄打包和解壓代碼(apache commons compress, io, lang)
package zip;
import java.io.BufferedOutputStream;
...
閱讀全文
posted @
2009-11-12 22:53 rox 閱讀(3995) |
評論 (1) |
編輯 收藏
Windows XP增強dos命令
命令:DIR,列文件、目錄
增加參數:/-C
參數說明:DIR列文件、目錄時顯示的文件大小,其數值以千為單位進行分隔,使用此參數即“DIR/-C”將取消顯示中的分隔符,以滿足部分人的視覺習慣。
增加參數:/Q
參數說明:Windows是多用戶操作系統,使用此參數即“DIR /Q”列文件、目錄時,將顯示出文件、目錄的用戶屬性。
增加參數:/T:C、/T:A、/T:W
參數說明:使用此參數即“DIR/T:C”、“DIR/T:A”、“DIR/T:W”分別顯示文件、目錄的創建時間、上次訪問時間和上次修改時間。
增加參數:/X
參數說明:使用此參數即“DIR/X”列文件、目錄時,會對長文件名同時顯示“8.3”格式的文件名。
命令:CD,改變目錄
增加參數:/D
參數說明:此參數的作用是快速改變當前目錄,比如當前目錄是C:\Windows,使用命令“CD/D E:\Tools”可快速切換到E:\Tools目錄下。注:只有在Win XP的“運行”文本框中輸入“CMD”得到的DOS窗口中才能使用此參數。
命令:MD,建立目錄
功能說明:此命令并未增加參數,但是增強了功能,它可一次建立多級子目錄, 例如使用命令“MD AA\BB\CC\DD”將一次性創建AA、BB、CC、DD四級子目錄。而在老版本的DOS中,若不存在AA子目錄,便無法直接建立AA下的BB等深層子目錄。
命令:RD,刪除目錄
增加參數:/S
參數說明:使用此參數即“RD/S”用于刪除目錄樹,即刪除目錄及目錄下的所有子目錄和文件,相當于以前版本中的DELTREE命令。
增加參數:/Q
參數說明:使用上面的/S參數刪除目錄樹時,系統會要求用戶確認是否真的要刪除。若同時使用/Q參數即“RD/S /Q”,在進行刪除操作時將取消確認,相當于DELTREE命令的/Y參數。
命令:DEL,刪除文件或目錄
增加參數:/F
參數說明:使用此參數即“DEL/F”可刪除只讀文件。
增加參數:/S、/Q
參數說明:使用此參數即“DEL/S”作用與“RD/S”完全相同,即刪除目錄及目錄下的所有子目錄和文件。同時使用參數/Q,可取消刪除操作時的系統確認。
增加參數:/A
參數說明:刪除指定屬性或指定屬性以外的文件,/AR、/AH、/AS、/AA分別表示刪除只讀、隱藏、系統、存檔文件,/A-R、/A-H、/A-S、/A-A表示刪除除只讀、隱藏、系統、存檔以外的文件。例如“DEL/AR *.*”表示刪除當前目錄下所有只讀文件,“DEL/A-S *.*”表示刪除當前目錄下除系統文件以外的所有文件。
命令:ATTRIB,更改文件或目錄的屬性
增加參數:/D
參數說明:在Win XP中我們不能把文件或文件夾設置為系統屬性,只能設為只讀、隱藏或存檔屬性。而帶參數/D使用ATTRIB命令可以對文件的所有屬性進行設定,設定時必須與參數/S同時使用。例如“ATTRIB /S /D +S D:\Study”,作用是將D:\Study文件夾設置為系統文件夾。
命令:Format,格式化磁盤
增加參數:/FS:filessystem
參數說明:按指定文件系統類型(FAT、FAT32、NTFS)格式化磁盤,例如“Format /FS:NTFS”。
命令:DATE、TIME,顯示系統日期和時間
增加參數:/T
參數說明:使用此參數即“DATE/T”、“TIME/T”將只顯示當前日期和時間,而不必輸入新日期和時間
Win2000/XP應用之奇技酷招
每個Windows用戶都希望Windows的啟動速度越快越好,不過,如果你想讓Windows啟動速度更快些,還要掌握一些加速Windows啟動的獨門秘技!
1.不容忽視的磁盤IDE通道
Windows XP中有一個非常影響啟動速度的設置,那就是磁盤IDE通道。一般來說,Windows XP用戶不需要安裝主板的IDE驅動或補丁程序,ULTRA DMA功能就已經打開了。也正因為如此,絕大多數用戶會讓IDE通道處于自動狀態,但這會導致Windows XP啟動變慢——因為主板可以連接四個IDE設備,但大多數電腦只有兩個IDE設備,即硬盤和光驅。少數人可能有單硬盤、雙光驅(DVD和刻錄機)或雙硬盤、單光驅,即便這樣也只有三個IDE設備,所以一般都有1~2個IDE通道處于空閑狀態。此時,你應該把并不存在的IDE設備設置為“無”,而不是“自動檢測”。
提示:設置IDE通道的方法是:單擊“開始→控制面板”,雙擊“系統”,切換到“硬件”選項卡,單擊“設備管理器”,再雙擊“IDE ATA/ATAPI控制器”。雙擊下面的“主要IDE通道”或“次要IDE通道”。我們可以看到,“設備0”下面的“設備類型”不可選,表明該IDE通道目前已被使用。“設備1”下面的“設備類型”可選,如果你近期內不再添加新的IDE設備,可以將“設備類型”設置為“無”。
2.禁用服務和啟用Power User
Windows 2000/XP的啟動速度要比Windows 9x/Me慢,眾多的服務是重要因素之一,因此普通用戶禁用一些無用的服務,對啟動速度也有很大幫助:
alerter (用戶不在局域網并且不需要管理警報)
clipbook (用戶不需要查看遠程剪貼簿的剪貼頁面)
distributed link tracking client (用戶不使用NTFS分區并且沒有連入局域網)
distributed transaction coordinator (不需要同時處理多個數據庫或文件系統)
fax service (不需要發送或接收傳真)
ftp publishing service(你的電腦不做為FTP服務器使用)
iis admin service (你的電腦不做為Web服務器使用)
另外,建議大家創建一個Power User用戶,平時用它來登錄Windows 2000/XP,因為相比管理員身份,它啟動的服務更少同時也更加安全。
3.及時清理日志文件
Windows 2000/XP的日志文件比較容易被用戶忽視。其實當我們每次開關機、運行程序、系統報錯時,這些信息都會被記錄下來,保存在日志文件中。但日志文件會隨著時間的增長越來越大,從而影響了系統啟動速度。我們可以自己指定日志文件的大小及處理方式:
進入“開始→設置→控制面板→管理工具”,雙擊“事件查看器”或是單擊“開始→運行”,輸入“eventvwr.msc”后回車,即可打開“事件查看器”,在右側窗口中可看到應用程序日志、安全日志和系統日志。在任意一種日志上面右擊并選擇“屬性”,就可以在如圖所示的對話框中為日志文件設定最大值,還可以選擇當日志滿了以后的處理方式——一般來說讓它自動覆蓋一段時間以前的舊日志,這樣日志文件就永遠不會超出指定大小。單擊“篩選器”選項卡可以指定需要寫入日志文件的事件類型。
設置“系統日志”的屬性
4.借花獻佛加快Windows 2000 啟動
Windows XP相比Windows 2000在很多方面進行了優化改進,因而啟動速度更快,那么能不能讓Windows 2000也可以享受這樣的好處呢?其實,只要找到Windows XP相應語言版本文件,然后替換Windows 2000的相應文件即可。這兩個文件為NTLDR、NTDETECT.COM,它們都在系統分區的根目錄下。當然,為了防止Windows 2000出錯,建議用戶在替換這兩個文件前備份Windows 2000原有的同名文件。
5.讓藍色滾動條只滾動一圈
這是一個適用于Windows XP的秘技。打開“注冊表編輯器”,依次展開[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters]分支,然后雙擊右側窗口中的DWORD值“EnablePrefetcher”,將其值由“3” 改為“1”。退出注冊表編輯器并重啟電腦,你會發現進入Windows XP時藍色滾動條的滾動時間明顯減少了!
posted @
2009-09-23 09:26 rox 閱讀(354) |
評論 (0) |
編輯 收藏
Java解壓多重zip壓縮包
-- org.apache.commons.compress.archivers.zip.ZipFile結合ZipArchiveInputStream來實現
針對前一篇文章《Java打多重zip壓縮包--
ByteArrayOutputStream結合org.apache.commons.compress來實現》打包后的zip文件如何解壓的問題。
部分代碼如下:
File f = new
File("c:/test.zip");
ZipFile zf = new ZipFile(f,
"gbk");
File folder = new
File("c:/test");
if (!folder.exists()) {
folder.mkdirs();
}
for
(Enumeration<ZipArchiveEntry> files = zf.getEntries();
files.hasMoreElements();) {
ZipArchiveEntry zae =
files.nextElement();
String zipname =
zae.getName();
if
(zipname.endsWith(".zip")) {
String
innerzip = StringUtils.removeEnd(zipname, ".zip");
File
innerfolder = new File(folder + File.separator + innerzip);
if
(!innerfolder.exists()) {
innerfolder.mkdirs();
}
ZipArchiveInputStream zais = new ZipArchiveInputStream(zf.getInputStream(zae),
"GBK", true);
FileOutputStream fos = null;
ZipArchiveEntry innerzae = null;
while
((innerzae = zais.getNextZipEntry()) != null) {
fos = new FileOutputStream(folder + File.separator + innerzip +
File.separator + innerzae.getName());
IOUtils.copy(zais, fos);
}
zais.close();
fos.flush();
fos.close();
} else {
ZipArchiveEntry packinfo = zf.getEntry(zipname);
String
filename = folder + File.separator + zipname;
FileOutputStream fos = new FileOutputStream(filename);
InputStream
is = zf.getInputStream(packinfo);
IOUtils.copy(is, fos);
is.close();
fos.flush();
fos.close();
}
}
zf.close();
|
解包后效果如下圖:
參考資料:
1、《Java打多重zip壓縮包 --
ByteArrayOutputStream結合org.apache.commons.compress來實現》
http://docs.google.com/View?id=ajfmzbdvh8wz_38ftxv59f6
2、Apache Commons Compress
http://commons.apache.org/compress/
3、本文地址
http://docs.google.com/View?id=ajfmzbdvh8wz_44cbjdbrfn
posted @
2009-07-28 19:02 rox 閱讀(6664) |
評論 (0) |
編輯 收藏
Java打多重zip壓縮包
-- ByteArrayOutputStream結合org.apache.commons.compress來實現
也就是很多個zip文件,但是打包的時候,部分要先集中到一個zip文件后,再寫入總的zip文件。
可以采用臨時文件夾的方式來解決,下面也是一種解決方法,部分代碼如下:
File f1 = new
File("C:/boot.ini");
File f2 = new File("C:/NTDETECT.COM");
final ByteArrayOutputStream baos =
new ByteArrayOutputStream() ;
//changed @ 2009年7月21日8:37:41
//ArchiveOutputStream ostemp = new
ArchiveStreamFactory().createArchiveOutputStream("zip", baos);
ZipArchiveOutputStream
ostemp = new ZipArchiveOutputStream(baos);
ostemp.setEncoding("GBK");
ostemp.putArchiveEntry(new
ZipArchiveEntry(f1.getName()));
IOUtils.copy(new
FileInputStream(f1), ostemp);
ostemp.closeArchiveEntry();
ostemp.putArchiveEntry(new
ZipArchiveEntry(f2.getName()));
IOUtils.copy(new
FileInputStream(f2), ostemp);
ostemp.closeArchiveEntry();
ostemp.finish();
ostemp.close();
final OutputStream out = new
FileOutputStream("c:/test.zip");
ArchiveOutputStream os = new
ArchiveStreamFactory().createArchiveOutputStream("zip", out);
os.putArchiveEntry(new
ZipArchiveEntry("打包.zip"));
baos.writeTo(os);
os.closeArchiveEntry();
baos.close();
os.finish();
os.close();
|
[changed @ 2009年7月21日8:37:41]
當初查資料時,就知道有個亂碼錯誤,自己從沒發現過,后來發現是因為winrar 3.8已經解決了這個問題。
但是為了和其他兼容,修改了代碼。
打包后效果如下圖:
參考資料:
1、Commons Compress
http://labs.xiaonei.com/apache-mirror/commons/compress/binaries/commons-compress-1.0-bin.tar.gz
2、java.io.ByteArrayOutputStream
http://java.sun.com/javase/6/docs/api/java/io/ByteArrayOutputStream.html
3、本文地址
http://docs.google.com/View?id=ajfmzbdvh8wz_38ftxv59f6
posted @
2009-07-02 17:04 rox 閱讀(1778) |
評論 (0) |
編輯 收藏
Apache Solr集成至Tomcat
原有系統已經開發,框架以SSH為基礎,頁面編碼GBK,數據庫為oracle,容器為tomcat6,需要整合全文檢索,下面只是一個簡單的整合測試。
1、嵌入Tomcat:
解壓 apache-solr-1.3.0.tgz,拷貝apache-solr-1.3.0\example\example-DIH\solr目錄到Tomcat的安裝目錄后,修改solr目錄中的solr.xml,屏蔽rss部分的配置,內容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<solr sharedLib="lib" persistent="true">
<cores adminPath="/admin/cores">
<core default="true" instanceDir="db" name="db"></core>
<!--
<core default="false" instanceDir="rss" name="rss"></core>
-->
</cores>
</solr>
|
- 刪除Tomcat\solr\rss目錄
- Tomcat\solr\db\lib目錄下添加必要jar:ojdbc14.jar、slf4j-jdk14-1.5.5.jar、slf4j-api-1.5.5.jar、solr-dataimporthandler-1.4-SNAPSHOT.jar
- 拷貝apache-solr-1.3.0\example\webapps\solr.war到Tomcat\webapps目錄下。
- 創建Tomcat\conf\Catalina\localhost\solr.xml,內容如下:
<Context docBase="${catalina.home}/webapps/solr.war" debug="0" crossContext="true" >
<Environment name="solr/home" type="java.lang.String" value="${catalina.home}/solr" override="true" />
</Context>
|
- 修改Tomcat\conf\server.xml,添加一個端口為8983的Connector,內容如下:
<Connector port="8983" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
|
2、配置DataImportHandler:
change @ 2009年7月1日10:19:57
主要修改Tomcat\solr\db\conf\db-data-config.xml、Tomcat\solr\db\conf\schema.xml、Tomcat\solr\db\conf\solrconfig.xml,三個配置文件:
<dataConfig>
<dataSource driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:orcl"
user="solr" password="solr" batchSize="50"/>
<document name="contents" >
<entity name="content" pk="ID"
query="select * from CONTENT"
deltaQuery="select ID from CONTENT where to_char(PUBTIME,'yyyy-mm-dd hh24:mi:ss') > '${dataimporter.last_index_time}'"
transformer="ClobTransformer">
<field name="title" column="TITLE" />
<field column="CONTENT" clob="true"/>
<field name="pubtime" column="PUBTIME" />
</entity>
</document>
</dataConfig>
|
在types標簽最后,追加fieldtype,名稱為text_cjk,中日韓分詞分析器;
......
<fieldtype name="text_cjk" class="solr.TextField">
<analyzer class="org.apache.lucene.analysis.cjk.CJKAnalyzer"/>
</fieldtype>
</types>
|
屏蔽或清除<fields></fields>中的全部代碼,并添加如下內容:
<fields>
<field name="id" type="slong" indexed="true" stored="true" required="true" />
<field name="title" type="text_cjk" indexed="true" stored="false"/>
<field name="content" type="text_cjk" indexed="true" stored="true"/>
<field name="pubtime" type="date" indexed="true" stored="true"/>
<field name="searchtext" type="text_cjk" indexed="true" stored="false" multiValued="true"/>
</fields>
|
修改默認唯一索引為先前定義的id:
<uniqueKey>id</uniqueKey>
|
修改默認搜索字段為先前定義的searchtext,并將要搜索的title和content都拷貝到searchtext中,方便統一檢索:
......
<defaultSearchField>searchtext</defaultSearchField>
......
<copyField source="title" dest="searchtext"/>
<copyField source="content" dest="searchtext"/>
......
|
add @ 2009年7月1日10:19:57
修改<dataDir></dataDir>標簽中的檢索數據存放路徑。內容如下:
<dataDir>${catalina.home}/solr/db/data</dataDir>
|
3、導入和查詢:
- 完全導入:
http://localhost:8983/solr/db/dataimport?command=full-import
- 增量導入:
http://localhost:8983/solr/db/dataimport?command=delta-import
- 查詢
http://localhost:8983/solr
點擊db,進入一個搜索頁面,填入如下內容:
pubtime:[2007-11-16T00:00:00Z TO 2008-11-28T00:00:00Z]
AND
工作;
pubtime desc
|
點擊搜索,測試。
4、xml解析:
一個簡單solr查詢結果的輔助搜索類,內容如下:
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.apache.commons.lang.time.DateUtils;
public class SolrUtils {
private List<Node> docs = new ArrayList<Node>();
private Number numFound = 0;
private Document doc;
public List<Node> getDocs() {
return docs;
}
public Number getNumFound() {
return numFound;
}
@SuppressWarnings("unchecked")
public SolrUtils(String urlString) {
doc = documentFromURL(urlString);
if (doc != null ) {
docs = (List<Node>)doc.selectNodes("/response/result/doc");
numFound = doc.numberValueOf("/response/result/@numFound");
}
}
public Document documentFromURL(String urlString){
try {
SAXReader reader = new SAXReader();
URL url = new URL(urlString);
doc = reader.read(url);
return doc;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String valueOf(Object obj, String name){
return valueOf(obj, "str", name);
}
public static Date dateValueOf(Object obj, String name){
String[] parsePatterns = new String[]{
"yyyy-MM-dd'T'HH:mm:ss'Z'",
"yyyy-MM-dd'T'HH:mm:ss.S'Z'",
"yyyy-MM-dd'T'HH:mm:ss.SS'Z'",
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
};
try {
return DateUtils.parseDate(valueOf(obj, "date", name), parsePatterns);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String valueOf(Object obj, String type, String name){
String path = "./" + type + "[@name='" + name + "']";
if (obj instanceof Node) {
Node n = (Node)obj;
return n.valueOf(path);
}
return "";
}
public static Number numberValueOf(Object obj, String type, String name){
String path = "./" + type + "[@name='" + name + "']";
if (obj instanceof Node) {
Node n = (Node)obj;
return n.numberValueOf(path);
}
return null;
}
public static void main(String[] args) throws Exception {
String url = "http://localhost:8983/solr/db/select/?q=*%3A*&version=2.2&start=0&rows=10&indent=on";
SolrUtils su = new SolrUtils(url);
System.out.println(su.getNumFound());
System.out.println(su.getDocs().size());
for (Node doc : su.getDocs()) {
System.out.println(valueOf(doc, "id"));
System.out.println(valueOf(doc, "title"));
System.out.println(dateValueOf(doc, "pubtime"));
}
}
}
|
參考資料:
1、Apache Solr 的新特性
http://www.ibm.com/developerworks/cn/java/j-solr-update/
2、Solr開發經驗[原]
http://www.jinsehupan.com/blog/?p=25
3、slf4j-jdk14-1.5.5.jar、slf4j-api-1.5.5.jar、solr-dataimporthandler-1.4-SNAPSHOT.jar
https://svn.apache.org/repos/asf/lucene/solr/trunk/lib/slf4j-jdk14-1.5.5.jar
https://svn.apache.org/repos/asf/lucene/solr/trunk/lib/slf4j-api-1.5.5.jar
http://people.apache.org/repo/m2-snapshot-repository/org/apache/solr/solr-dataimporthandler/1.4-SNAPSHOT/solr-dataimporthandler-1.4-SNAPSHOT.jar
4、本文地址
http://docs.google.com/View?id=ajfmzbdvh8wz_37f4jv46gb
posted @
2009-06-28 01:19 rox 閱讀(3113) |
評論 (0) |
編輯 收藏
原帖:http://space.itpub.net/29987/viewspace-51921
有的時候我們看到多個異常的進程需要被kill掉,如果一個一個的去做的話,覺得實在是太慢,下面這里提供有兩種方法可以實現對有規律的結果做這個kill的動作。
1.
ps -ef | grep $1| awk '{print $2}' | xargs kill -9
2.
for i in `ps -ef|grep $1|awk '{print $2 }'`
do
kill -9 $i
done
另可以把ps語句再增加些參數如下:
ps -ef|grep java| grep -v grep| grep $1| awk '{print $2}'
posted @
2009-01-07 09:42 rox 閱讀(647) |
評論 (0) |
編輯 收藏
摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtm...
閱讀全文
posted @
2008-12-30 00:08 rox 閱讀(20157) |
評論 (2) |
編輯 收藏
其實,就是類似原來使用磁盤啟動然后手動安裝Linux。
一、必須要大于光盤鏡像images目錄中的diskboot.img文件,以rhel5為例,要大于12M,這個應該不難。
二、下載dd for windows,網址:http://www.chrysocome.net/dd
三、C:\>dd if=c:\diskboot.img of=\\.\h: bs=1M --size --progress
四、內網發布一個HTTP目錄,把DVD光盤鏡像中的全部文件放到發布目錄中。
五、設置U盤啟動,進入Linux安裝界面,F2,然后輸入linux askmethod,配置IP,使用HTTP,訪問內網的安裝目錄即可。
備注,參考這篇文章
http://hi.baidu.com/evanlei/blog/item/3c3135103f0244ffc3ce79aa.html
WinImage寫入到U盤,不能正常啟動。以我的32M為例,使用WinImage寫入后,仍然為32M。
但使用dd for windows,就只有12M,其他的空間消失了,卻能夠正常啟動,也使用1GB卡+讀卡器成功啟動。
如果容量是4G或者8G,完全可以使用UltraISO,把整個文件寫入到U盤中啟動直接安裝,不過還沒有測試過。
posted @
2008-12-18 16:07 rox 閱讀(691) |
評論 (0) |
編輯 收藏