Somebody use this solution for parser xml ^^, have a fun !!!
String input = "Input Stream ";
try {
ByteArrayInputStream ba = new ByteArrayInputStream(input.getBytes());
// TODO Codes //
// ...
// ...
//
} catch (Exception e) {
e.printStackTrace();
}
Wednesday, May 27, 2009
Convert an input String to InputStream
Tuesday, May 26, 2009
การค้นหา file บน Linux (คำสั่ง locate) #2
| $ cd ~ $ updatedb --output=$HOME/.tophy_locatedb --localpaths=`pwd` |
คำสั่งนี้จะสร้างไฟล์ ./tophy_locatedb ซึ่งเป็นไฟล์ฐานข้อมูลของไฟล์ทั้งหมดใน home directory ของเรา
| $ locate -d ~/.tophy_locatedb Calymore |
คำสั่งนี้จะเป็นการค้นหาไฟล์ที่ชื่อ Claymore ในฐานข้อมูลที่เราสร้างขึ้น โดยปกติแล้วเราควรจะทำการ update ฐานข้อมูลทุกๆ วันซึ่งมักจะทำกันในช่วงเวลากลางคือด้วยการใช้คำสั่ง crontab (ไว้มีเวลาจะมาเขียนเรื่อง crontab)
| $ locate Claymore |
เป็นการค้นหาไฟล์ที่ชื่อว่า Claymore โดยผลลัพธ์จะแสดงเป็น full path เช่น
| /home/tophy/anime/Claymore /homt/tophy/OST/Claymore |
นอกจากจะหาจากคำเต็มๆ แล้วยังใช้อักขระ '*' เข้าช่วยในการค้นหาเหมือนคำสั่ง find ได้ด้วย เช่น
| $locate "Claymore*" |
เป็นการหาไฟล์ใดๆ ที่ขึ้นต้นด้วยคำว่า Claymore
| $locate "Claymore*" -q |
จะคล้ายกับคำสั่งด้านบนแต่ว่าจะไม่แสดง error message ขึ้นมา ถ้าเทียบกับคำสั่ง find แล้วจะคล้ายกับ 2>/dev/null
| $ locate "*Claymore*" -n 10 |
จะเหมือนกับตัวอย่างที่ 2 แต่จะแสดงผลลัพธ์ออกมาแค่ 10 รายการเท่านั้น
| $ locate "*Claymore*" -i |
จะหาไฟล์ที่ขึ้นต้นด้วยคำว่า Claymore โดยไม่สนใจอักขระตัวเล็กตัวใหญ่ (non-case sensitive) นอกจากตัวอย่างที่ยกมาแล้ว locate ยังมี parameter อีกตัวหนึ่งที่น่าสนใจมากคือ -r ซึ่งเป็นการใช้ regular expression มาใช้งานในการค้นหาไฟล์ เช่น
| $locate -r "/Claymore.*\.avi" |
เป็นคำสั่งที่ใช้ค้นหาไฟล์ที่ขึ้นต้นด้วยคำว่า Claymore และจบลงด้วยคำว่า .avi เช่น
| Claymore [raw] - 01.avi Claymore [raw] - 02.avi |
Credit : http://www.secguru.com,
http://are.berkeley.edu,
http://www.codecoffee.com/tipsforlinux/articles/20.html
ref: http://top85.spaces.live.com/blog/cns!D84A636C1EFDB724!230.entry
การค้นหา file บน Linux (คำสั่ง find) #1
| $ find /home/tophy -name 'index*' $ find /home/tophy -iname 'index*' |
คำสั่งข้างบนจะเป็นการค้นหาไฟล์ที่อยู่ใน directory /home/tophy และ subdirectory
คำสั่งแรกจะใช้ parameter -name เพื่อระบุชื่อไฟล์และตามด้วย 'index*' ซึ่งหมายความว่าเป็นไฟล์ใดๆ ที่ขึ้นต้นด้วยคำว่า index
คำสั่งที่ 2 จะคล้ายกับคำสั่งแรกแต่จะใช้ parameter -iname ซึ่งเป็นการไม่สนใจตัวอักษรเล็กหรือใหญ่ (non-case sensitive) เช่น ชื่อไฟล์ที่ขึ้นต้นด้วย Index, inDex, INDEX เป็นต้น
| $ find /home/tophy -name 'index*' 2>/dev/null |
คำสั่งด้านบนจะคล้ายกับตัวอย่างก่อนหน้าแต่จะเพิ่มในส่วน 2>/dev/null ซึ่งหมายความว่าระหว่างการค้นหาถ้ามี error message เกิดขึ้นจะนำ error message ไปใส่ไว้ใน /dev/null ซึ่งเป็นอุปกรณ์ที่ไม่ว่าจะใส่อะไรเขาไปสิ่งนั้นก็จะหายไป ถ้าเราต้องการดู error message ทำได้โดยเปลี่ยนจาก /dev/null เป็นชื่อไฟล์ใดๆ ไว้เก็บ error message ปัญหาที่อาจะะเกิดขึ้นได้ เช่น ผู้ใช้ไม่ได้เป็น root แต่ find ในส่วนของ root
| $ find -name met* |
รูปแบบคำสั่งแบบนี้จะไม่ระบุ path เหมือนคำสั่งก่อนหน้าซึ่งหมายความว่าให้ค้นหาไฟล์ที่ขึ้นต้นด้วยคำว่า met จาก directory ปัจจุบันและ subdirectory จากคำสั่งข้างต้นสามารถนำมาประยุกต์ได้ เช่น
| find . -print find . find |
คำสั่งทั้ง 3 จะเป็นการแสดงรายชื่อไฟล์ทั้งหมดที่อยู่ใน directory ปัจจุบัน
| $ find / -name '*.mp3' -size -5000k $ find / -size +10000k |
คำสั่งแรกจะค้นหาจากตำแหน่ง / โดยค้นหาไฟล์ที่ลงท้ายด้วย .mp3 และมีการกำหนด parameter -size เข้าไปเพื่อระบุว่าค้นหาไฟล์ที่มีขนาดน้อยกว่า 5MB (-5000k)
คำสั่งที่ 2 จะคล้ายคำสั่งแรกแต่จะเป็นการค้นหาไฟล์ใดๆ ก็ได้ที่มีขนาดไฟล์มากกว่า 10MB (+10000k)
| $ find /home/tophy -amin -10 -name '*.c' $ find /home/tophy -atime -2 -name '*.c' $ find /home/tophy -mmin -10 -name '*.c' $ find /home/tophy -mtime -2 -name '*.c' |
คำสั่งแรกจะค้นหาไฟล์จากตำแหน่ง /home/tophy ชื่อไฟล์ที่ลงท้ายด้วย .c ที่ access ไปเมื่อ 10 นาทีที่แล้ว
คำสั่งที่ 2 คล้ายกับคำสั่งแรกจะต่างที่เวลาที่ access จะเป็นช่วง (2-1)*24-2*24 ชม. นั่นก็คือ 24-48 ชม.
คำสั่งที่ 3 คล้ายกับคำสั่งแรกแต่จะค้นหาไฟล์ที่มีการ modified เมื่อ 10 นาทีที่แล้ว
คำสั่งที่ 4 คล้ายกับคำสั่งแรกแต่จะค้นหาไฟล์ที่มีการ modified เป็นช่วง (2-1)*24-2*24 ชม. นั่นก็คือ 24-48 ชม.
ระบบการนับทั้ง atime และ mtime ถ้าเราใส่ค่า 0 หรือ -1 จะหมายถึงเวลาภายใน 24 ชม.
| $ find / -name 'Claymore*' -and -size +10000k $ find / -size +10000k ! -name "Claymore*" $ find / -name 'Claymore*' -or -size +10000k |
คำสั่งทั้ง 3 เป็นการประยุกต์ใช้ boolean operator มาช่วยในการค้นหาไฟล์
คำสั่งแรก ค้นหาไฟล์เริ่มที่ตำแหน่ง / ที่ขึ้นต้นด้วยคำว่า Claymore และขนาดไฟล์มากกว่า 10MB
คำสั่งที่ 2 ค้นหาไฟล์เริ่มที่ตำแหน่ง / ที่มีขนาดไฟล์มากกว่า 10MB และต้องเป็นไฟล์ที่ไม่ได้ขึ้นต้นด้วยคำว่า Claymore
คำสั่งที่ 3 ค้นหาไฟล์เริ่มที่ตำแหน่ง / ที่ขึ้นต้นด้วยคำว่า Claymore หรือไฟล์ใดๆ ที่มีขนาดมากกว่า 10MB
| $ find / - name 'Claymore*' -exec ls -l |
รูปแบบคำสั่งแบบสุดท้ายจะมีความหลากหลายมากขึ้นประสิทธิภาพของการค้นหาจะขึ้นอยู่กับการนำไปประยุกต์ของผู้ใช้ parameter ของคำสั่งนี้คือ -exec ซึ่งค่าตามหลังจะเป็นคำสั่งที่ทำงานหลังจากคำสั่ง find ด้านหน้าทำงานเสร็จสิ้น ในตัวอย่างจะเป็นการหาไฟล์ที่ขึ้นต้นด้วยคำว่า Claymore เริ่มที่ตำแหน่ง / จากนั้นนำผลลัพธ์ที่ได้มาแสดงผลโดยโชว์รายละเอียดของไฟล์ด้วยคำสั่ง ls -l
นอกจากวิธีการจากตัวอย่างทั้งหมดแล้วการใช้ find ยังมี parameter อีกหลายตัวที่มีความซับซ้อนและต้องทำความเข้าใจอีกมาก เช่น
| -regex ใช้ regular expression ช่วยในการค้นหา -iregex เหมือนกับคำสั่งด้านบนแต่เป็น non-case sensitive -empty ค้นหาไฟล์หรือ directory ที่ว่างเปล่า -type ค้นหาตามประเภทของไฟล์ -user ค้นหาไฟล์ที่มีเจ้าของเป็น user ที่ต้องการ -group ค้นหาไฟล์ตาม group ที่ต้องการ |
credit:http://www.codecoffee.com/tipsforlinux/articles/21.html,
http://www.secguru.com
ref: http://top85.spaces.live.com/blog/cns!D84A636C1EFDB724!229.entry
StringTokenizer how to
while (stn.hasMoreTokens()) {
String s = (String) stn.nextElement();
System.out.println(s);
}
Saturday, May 23, 2009
การ init ค่าใน Array เริ่มต้นของ java
เราทราบกันว่า การสร้าง array เป็นอย่างไรแล้ว ... แต่ ถ้าเราต้องการสร้าง array ขนาด 100 สมาชิก และอยากให้แต่ละสมาชิกมีค่า 0 หรือ 1 ทั้งหมดเราควรทำอย่างไร?
วิธีแรก ... กำปั้นทุบดิน ...
เราก็สร้าง array มา 100 ตัว ... จากนั้นก็วน loop ใส่ค่า 1 ให้กับทุกสมาชิก ดังนี้
int[] ex = new int[100];
for (int i = 0; i < ex.length; i++) {
ex[i] = 1;
}
อืม ... มันก็ง่ายดีครับ ... แต่มันคงไม่ดีแน่ ... ผมเลยหาๆ ดูใน api java (อันที่จริงเคาะ ctrl + space bar ใน ide มากกว่า) ก็ไปเจอ static method ใน Arrays ครับ จึงเป็นที่มาของวิธีที่สอง
วิธีที่สอง ... ใช้ Arrays.fill(Obj[], Obj_value);
ครับ ... เราสามารถใช้คำสั่ง Arrays.fill(ตัวแปรที่เป็น array อยู่แล้ว, ค่าที่ต้องการ) ซึ่งในที่นี้ผมให้เป็น 1
int[] ex = new int[100];
Arrays.fill(ex, 1);
เรียบร้อยครับ ... :) ก็เป็นการใช้สิ่งที่มีอยู่ให้เกิดประโยชน์ครับ :D
