반응형
ConnectThread.java
package UrlTextDownload; import java.io.*; import java.net.*; // 웹에서 문서를 다운로드 받는 Thread Class public class ConnectThread extends Thread { // 다운로드 받는 주소 변수 String urlStr; // 다운로드 받을 주소를 넘겨받아서 멤버 편수에 저장하는 생성자 public ConnectThread(String urlStr){ this.urlStr = urlStr; } // Thread로 동작할 메소드 - 제정의 public void run(){ final String output = request(urlStr); System.out.println("가져온 내용 : " + output); } // 실제 다운로드를 수행해서 문자열을 리턴할 메소드 private String request(String urlStr){ // 다운로드 받은 문자열을 저장할 변수 StringBuilder html = new StringBuilder(); try{ // 다운로드 받을 URL객체 생성 URL url = new URL(urlStr); // URL에 연결할수 있는 객체 생성 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); // 객체 생성에 성공하면 if( conn == null){ // 연결설정 // 연결 시도시간 설정 conn.setConnectTimeout(5000); // 캐시사용 여 부 conn.setUseCaches(false); // 정상적인 연결이 이루어지려면 if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){ // 문자열을 읽어올 Reader 생성 BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); while(true){ String line = in.readLine(); if(line == null) break; html.append(line + "\n"); }//while in.close(); }//if conn.disconnect(); }//if }catch(Exception e){ System.out.println(e.getMessage()); }// Try & catch return html.toString(); } }
DownloadFile.java
package UrlTextDownload; import java.io.FileOutputStream; import java.io.InputStream; import java.net.*; import java.util.*; public class DownloadFile implements Runnable { // 다운로드 받을 주소와 저장할 파일명을 위한 변ㅅ String mAddr; String mFile; //생성자 public DownloadFile(String mAddr, String mFile) { this.mAddr = mAddr; this.mFile = mFile; } public void run() { // 다운로드 받을 주소를 만들기 위한 변수 URL imageUrl; // 데이터를 바이트다윈로 읽을 때 읽을 위치를 저장할 변수 int read; try{ // 다운로드 받을 URL 생성 imageUrl = new URL(mAddr); // 연결 객체 생성 HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection(); // 연결된 파일의 크기 가져오기 int len = conn.getContentLength(); // 데이터를 저장할 배열생성 byte raster [] = new byte [len]; // 웹에서 읽어올 스트림 생성 - 일반 파일을 읽는 경우 InputStream is = conn.getInputStream(); // 파일에 기록할 스트림 생성 FileOutputStream fos = new FileOutputStream(mFile); while(true){ // is 에서 읽어서 raster에 젖ㅇ하고 읽은 마지막위치를 read에 ㅈ장 read = is.read(raster); // 읽은데이터가 없다면 if(read <= 0){ break; } // raster 배열에서 0부턴 read 만큼 읽어서 fos에 기록 fos.write(raster,0,read); } is.close();fos.close();conn.disconnect(); }catch(Exception e){System.out.println(e.getMessage());} } }
Main.java
package UrlTextDownload; import java.io.File; public class Main { public static void main(String[] args) { // ConnectThread th = new ConnectThread("www.naver.com"); // th.start(); // 다운로드 받을 파일의 주소를 생성 String imageUrl = ""; //"http://sangjinhan.files.wordpress.com/2014/06/056_ebb095ebb3b4ec9881.jpg"; //"http://sangjinhan.files.wordpress.com/2014/06/056_ebb095ebb3b4ec9881.jpg; // 파일명을 만들기 우해서 마지막 /의 윛를 찾아오기 int idx = imageUrl.lastIndexOf("/"); // 마지막 /뒤에 문자열 가져오기 String localimage = imageUrl.substring(idx+1); // 파일 경로 생성 String path = "c://download//" + localimage; // 파일이 있으면 그냥 넘어가고 없으면 다운로드 if(new File(path).exists()){ System.out.println("파일이 이미 존재합니다"); }else{ System.out.println("Download"); //Runnable을 implements한 경우에는 스레드위 생성과 시작 DownloadFile down = new DownloadFile(imageUrl,path); Thread th = new Thread(down); th.start(); } } }
'JAVA > Java' 카테고리의 다른 글
[JAVA] xml 파싱(Parsing) 하기 (0) | 2014.11.18 |
---|---|
[JAVA] 간단한 UDP server, client (0) | 2014.11.18 |
[JAVA] UDP 를 사용한 파일 전송 (0) | 2014.11.18 |
[JAVA] 자신의 ip 확인 및 IP 출력 (0) | 2014.11.18 |
[JAVA] Multicast Server, Client (Socket) (0) | 2014.11.18 |