- new URL(String 다운로드 받을 주소) : 잘못 된 주소를 설정하면 예외가 발생합니다.
- 예외처리를 반드시해주어야 합니다.
3. URLConnection 클래스
- URL을 이용해서 데이터를 주고 받을 수 있는 클래스
- URL 인스턴스의 openConnection 이라는 메소드를 호출해서 만드는데 HttpURLConnection 이나 HttpsURLConnection 자료형으로 형 변환해서 사용합니다.
- connectTimeout(접속 시도 시간 - 1/1000초 단위로 설정), useCache(이전에 다운로드 받은 데이터를 사용할지 여부를 boolean으로 설정) 옵션을 설정
- 데이터를 가져오기 위해서는 스트림을 생성해야 하는데 getInputStream()을 호출하면 데이터를 읽어올 수 있는 스트림을 리턴하는데, 이 스트림을 가지고 필요한 스트림을 생성해서 사용해야 합니다.
- 문자열일 때는 BufferedReader(new InputStreamReader(?.getInputStream()))으로 BufferedReader객체를 만들어서 읽어야 하고 일반 파일일 때는 BufferedInputStream(?.getInputStream()))으로 BufferedInputStream 객체를 만들어서 읽어야 합니다.
파일- 통신
스트림 생성
바이트 스트림
(바이트 단위 - 텍스트 파일을 제외한 모든 자료)
캐릭터 스트림
(텍스트 파일)
ObjectInputStream
ObjectOutputStream
파일을 읽고 출력 시키기 위한
FileReader
FileWriter
FileInputStream
FileOutputStream
↓
↓
↓
↓
버퍼를 하기 위한
BufferedReader
PrintWriter
BufferedInputStream
PrintStream
4. Thread 클래스
- 네트워크를 사용하는 로직은 시간이 얼마나 걸릴지 알 수 없고 느린 작업이기 때문에 스레드를 이용하지 않으면 프로그램이 얼어버리는 효과가 나타날 수 있으므로 스레드를 이용해서 작업을 하도록 하고 작업 중 이라는 것을 계속 표시해주는 것이 좋습니다.
- iOS 나 Android에서는 이러한 작업을 하지 않으면 동작하지 않거나 마켓에서 reject 됩니다.
- 상속받는 클래스를 이용해서 만들기
class ? extends Thread{
public void run(){
스레드로 수행할 내용;
}
}
?변수명 = new ?();
변수명.start();
- 상속받는 클래스를 이용하지 않고 만들기
Thread 변수명 = new Thread(){
public void run(){
스레드로 수행할 내용;
}
};
변수명.start();
=>더조은 메인 페이지의 html 가져오기
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class URLTextDownload {
public static void main(String[] args) {
try {
//1. 다운로드 받을 주소 만들기
String addr = "http://www.tjoeun.co.kr/";
//한글이 포함된 경우라면 URLEncoder.encode 메소드를
//이용해서 한글을 인코딩합니다.
//2. 주소를 가지고 URL 객체를 생성
URL url = new URL(addr);
//3. URL 연결 객체를 생성합니다.
HttpURLConnection con =
(HttpURLConnection)url.openConnection();
//4. 옵션을 설정합니다.
//연결이 안되면 30초까지 시도
con.setConnectTimeout(30000);
//이전에 받은 데이터가 있어도 사용하지 않도록 설정
con.setUseCaches(false);
//5.다운로드 받을 스트림 생성
BufferedReader br =
new BufferedReader(
new InputStreamReader(
con.getInputStream(), "EUC-KR") );
//6.데이터를 읽어서 String으로 만들기
//문자열을 복사하지 않고 편집할 수 있는 클래스의 객체 만들기
StringBuilder sb = new StringBuilder();
while(true) {
//한 줄의 문자열을 읽기
String line = br.readLine();
//읽은 게 없으면 읽기 중단
if(line == null) {
break;
}
//읽은 데이터가 있으면 sb에 추가
sb.append(line + "\n");
}
//읽은 데이터를 String으로 변환
String html = sb.toString();
//화면에 출력
System.out.println(html);
//7.사용한 객체 정리
br.close();
con.disconnect();
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
이미지 파일을 다운로드 받아서 로컬 컴퓨터에 저장하기
파일을 다운로드 받아서 저장할 대는 파일의 존재여부를 확인해서 존재하는 경우는 다운로드 받지 않고 없는 경우에만 다운로드 받는 것이 좋습니다.
파일이 업데이트 되는 경우라면 최후 수정 시간을 확인해서 다운로드 합니다.
파일을 읽을 대는 버퍼드리더 대신에 퍼버드 인풋 스트림 객체를 만들어서 데이터를 바이트 단위로 읽어서 기록하면 됩니다.
http://www.onlifezone.com/files/attach/images/962811/376/321/005/2.jpg 의 파일을 다운로드 받아서 2.jpg 파일로 저장하기