JavaはURLアドレスからテキストコンテンツをローカルファイルにダウンロードする
10671 ワード
JavaはURLアドレスからテキストコンテンツをローカルファイルにダウンロードする
HTTP転送プロトコルの過程で、HTTPサーバは各応答の前のヘッダに大量の情報を提供した.例えば、次のApache Webサーバが返す典型的なHTTPヘッダ:ここでは、URLによるリソースダウンロードを記述する際に、接続を確立し、getContentType()を使用してテキストカテゴリを特定し、例えばtxtファイルのみをダウンロードし、Content-Type以外のtextファイルを指定し、例外を放出します.次にgetContentLength()でテキストサイズを取得し、IOストリームでテキスト内容をローカル指定ファイルに保存します.コードは次のとおりです.
HTTP転送プロトコルの過程で、HTTPサーバは各応答の前のヘッダに大量の情報を提供した.例えば、次のApache Webサーバが返す典型的なHTTPヘッダ:ここでは、URLによるリソースダウンロードを記述する際に、接続を確立し、getContentType()を使用してテキストカテゴリを特定し、例えばtxtファイルのみをダウンロードし、Content-Type以外のtextファイルを指定し、例外を放出します.次にgetContentLength()でテキストサイズを取得し、IOストリームでテキスト内容をローカル指定ファイルに保存します.コードは次のとおりです.
// An highlighted block
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class BinarySaver {
private final static String url = " ";
public static void main(String[] args) {
try {
URL root = new URL(url);
saveBinary(root);
} catch (MalformedURLException e) {
// TODO: handle exception
System.out.println(url + "is not URL");
} catch (IOException e) {
// TODO: handle exception
System.out.println(e);
}
}
public static void saveBinary(URL u) throws IOException {
// TODO Auto-generated method stub
URLConnection uc = u.openConnection();
String contentType = uc.getContentType();
int contentLength = uc.getContentLength();
/*
*
if (contentType.startsWith("text/") || contentLength == -1) {
throw new IOException("This is not a binary file.");
}*/
try (InputStream raw = uc.getInputStream()) {
InputStream in = new BufferedInputStream(raw);
byte[] data = new byte[contentLength];
int offset = 0;
while (offset < contentLength) {
int bytesRead = in.read(data, offset, data.length - offset);
if (bytesRead == -1) {
break;
}
offset += bytesRead;
}
if (offset != contentLength) {
throw new IOException("Only read " + offset
+ " bytes; Expected " + contentLength + " bytes");
}
String filename = " ";
try (FileOutputStream fout = new FileOutputStream(filename)) {
fout.write(data);
fout.flush();
}
}
}
}