搜尋此網誌

2013年6月13日 星期四

【Java】實作從網址下載pdf檔案

package Crawler;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;

/**
 * @author PTODUE
 *
 */
public class SavePdf {


 public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub
  String path = "http://XXX.XXX.XXX.XXX/a/b/XXXX.pdf";  //下載檔案的網址
  
  String filePath = url.getFile();   //檔案路徑  ex:a/b/XXXX.pdf
  String fileName ="";    //儲存檔名
  
  /*
   *取出XXXX.pdf
   *
  /
  int start = filePath.lastIndexOf("/") + 1;
        int end = filePath.lastIndexOf("?", start);
        if (end == -1)
            end = filePath.length();
        fileName = filePath.substring(start, end);
  
  String outputFile = "C:/downkload/"+fileName; // 要下載檔案的位置
  File desFile = new File(outputFile);

  if (desFile.exists())
   desFile.delete();
  
  
  URL url = new URL(path);
  URLConnection connection = url.openConnection();
  
  byte[] buffer = new byte[1024]; // InputStream

  // 設定接收資料流來源 ,就是要下載的網址
  BufferedInputStream bufferedInputStream = new BufferedInputStream(connection.getInputStream());
  // 設定 儲存要下載檔案的位置.
  BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(desFile));
  int length = -1;
  while ((length = bufferedInputStream.read(buffer)) != -1) {
   bufferedOutputStream.write(buffer,0,length);
  }
  bufferedOutputStream.flush();// 將緩衝區中的資料全部寫出
  bufferedInputStream.close(); // 關閉資料流
  bufferedOutputStream.close();
  System.out.println("下載完成");

 }
}

2013年6月12日 星期三

【Music】My Body Is A Cage


"My Body Is A Cage"
牢寵之軀

My body is a cage
我的軀體如同牢籠
That keeps me from dancing with the one I love 
阻止我與所愛之人一同共舞
But my mind holds the key
但我的思緒能將其開啟

My body is a cage
我的軀體如同牢籠
That keeps me from dancing with the one I love 
阻止我與所愛之人一同共舞
But my mind holds the key
但我的思緒能將其開啟

I'm standing on a stage
我站在臺上
Of fear and self-doubt
充滿恐懼 缺乏自信
It's a hollow play
這場戲碼毫無價值
But they'll clap anyway
但觀眾仍會為我鼓掌

My body is a cage
我的軀體如同牢籠
That keeps me from dancing with the one I love 
它阻止我與所愛之人一同共舞
But my mind holds the key
但我的思緒能將其開啟

You're standing next to me
你就站在我身邊
My mind holds the key
我的思緒能將其開啟

I'm living in an age
我活在某個世代
That calls darkness light
人們稱黑暗為光明
Though my language is dead
儘管我已喪失語言能力
Still the shapes fill my head
腦子仍忘不了那模樣

I'm living in an age
我活在某個世代
Whose name I don't know
不知道名稱為何
Though the fear keeps me moving 
儘管恐懼逼我前進
Still my heart beats so slow
我的心跳卻依舊緩慢

My body is a cage
我的軀體如同牢籠
That keeps me from dancing with the one I love 
阻止我與所愛之人一同共舞
But my mind holds the key
但我的思緒能將其開啟

You're standing next to me
你就站在我身邊
My mind holds the key
我的思緒能將其開啟
My body is a
我的軀體是個…

My body is a cage 
我的軀體如同牢籠
We take what we're given
我們接受賜與的恩惠
Just because you've forgotten 
只因罪惡已被遺忘
That don't mean you're forgiven
並非已被世人原諒

I'm living in an age
我活在某個世代
That screams my name at night
晚上有人大喊我的名字
But when I get to the doorway
等我走到門口
There's no one in sight
卻發現空無一人

My body is a cage
我的軀體如同牢籠
That keeps me from dancing with the one I love 
阻止我與所愛之人一同共舞
But my mind holds the key
但我的思緒能將其開啟

You're standing next to me
你就站在我身邊
My mind holds the key
我的思緒能將其開啟

Set my spirit free
解放我的靈魂
Set my spirit free
解放我的靈魂
Set my body free 
解放我的軀體

【Java】中文URL和URI的轉換

最近在做Crawler,爬回來的超連結發現,有些明明就是中文的網址,在瀏覽器上也是顯示中文,去查網頁的編碼是UTF-8沒錯但是抓回來的中文網址卻變成英文、數字、和百分比符號顯示亂碼的字串。
估狗後,這些亂碼並不是真的亂馬1/2(誤),而是URI編碼。欲知詳情,請見URL編碼

URL  <-----> URI
以下只是臨時打的範例,不確定與法有無正確。參考參考。

import java.net.URLDecoder;
import java.net.URLEncoder;


String test = "URI編碼";
String demo ="";

demo = URLEncoder.decode(test , "UTF-8");
System.out.println("URI編碼:"+demo);
demo = URLEncoder.decode(test , "UTF-8");
System.out.println("URI解碼:"+demo);



【Blogger】在Blog中貼程式碼

二版日期:2017/10/10
初版日期:2013/06/12
---------------------------------------------------------------------------------------
試試這個
SlidesCodeHighlighter@github
或是  比較單調的
http://formatmysourcecode.blogspot.tw/

----------------------------我是分隔線---------------------------------------------
如果把程式碼直接貼到blog上,會造成排版跑掉,增加讀取的困難。
還好有這個Online syntax highlighting for "Java"


  1. 只要把程式碼貼入textbox中。
  2. 選取想要對應的style以及script語言。
  3. 按下Highlight,產生出的html和css標色語法,記得全選複製貼到blog中。







【Java】【轉載】 Apache HttpClient 4.x 使用 GET, POST 範例

在看範例之前先把一些重要連結整理給大家: 
想知道這次到底更動了哪些東西可以看:Apache HttpClient 首頁
官方的 Tutorial 在:Apache HttpClient Tutorial 
而 API DOC、說明文件則在:Apache HttpClient apidocs

相關的程式碼、jar 檔在:HttpComponents HttpClient 4.0 (GA)
注意,在寫程式前必需先將四個 jar 檔正確匯入,最後兩個(*)是選用,

commons-logging-x.x.x.jar
commons-codec-x.x.x.jar
httpcore-x.x.x.jar
httpclient-x.x.x.jar
apache-mime4j-x.x.x.jar (*)
httpmime-x.x.x.jar (*)
說了這麼多,以下是程式的範例,
第一個是傳回在 google 查詢 httpclient 的結果。
第二則是傳回台大圖書館查詢 Head First Java 的結果。

  • 實際安裝jar版本:
    • apache-mime4j.jar
    • commons-codec-1.4.jar
    • commons-logging-1.1.1.jar
    • httpclient-4.0.1.jar
    • httpclient-4.1.jar
    • httpcore-4.1.jar
    • httpmime-4.1.jar


package Crawler;

import java.io.IOException;
import java.util.ArrayList;

import org.apache.http.HttpStatus;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**
 * Apache HttpClient 4.x 使用 GET, POST 查詢網頁的範例
 * 
 * 
 */
public class Crawler extends DefaultHttpClient {

 public static void main(String[] args) throws IOException {

  DefaultHttpClient demo = new DefaultHttpClient();
  demo.getParams().setParameter("http.protocol.content-charset", "UTF-8");

  // Get Request Example,取得 google 查詢 httpclient 的結果
  HttpGet httpGet = new HttpGet(http://www.google.com.tw/search?q=httpclinet");
  HttpResponse response = demo.execute(httpGet);
  String responseString = EntityUtils.toString(response.getEntity());
  if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
   // 如果回傳是200 OK 的話才輸出
   System.out.println(responseString);
  } else {
   System.out.println(response.getStatusLine());
  }
 
   // Post Request Example,查詢台大圖書館書籍
   ArrayList<NameValuePair> pairList = new ArrayList<NameValuePair>();
   pairList.add(new BasicNameValuePair("searchtype", "t"));
   pairList.add(new BasicNameValuePair("searchscope", "keyword"));
   pairList.add(new BasicNameValuePair("searcharg", "Head First Java"));
   pairList.add(new BasicNameValuePair("SORT", "D"));
  
   HttpPost httpPost = new
   HttpPost("http://tulips.ntu.edu.tw:1081/search*cht/a?");
   StringEntity entity = new
   StringEntity(URLEncodedUtils.format(pairList, "UTF-8"));
   httpPost.setEntity(entity);
   response = demo.execute(httpPost);
   responseString = EntityUtils.toString(response.getEntity());
   if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
   // 如果回傳是200 OK 的話才輸出
   System.out.println(responseString);
   } else {
   System.out.println(response.getStatusLine());
   }
 }
}