キャラクタセットを指定してテキストとして取得
テキストファイルの入出力はこちらを参照して下さい。 InputStream の扱いはテキストファイルを基本に考えれば良いと思います。 WEB 上のデータも結局 InputStream で取得しています。
import java.net.*; import java.io.*; public class Main { public static void main(String[] args) { try { // 書き込みファイル名 String filename = "index.html"; // テキストで書き込み為の俊美 BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(filename), "UTF8" ) ); // URL文字列 String str = "https://lightbox.sakura.ne.jp/demo/template/basic/basic-html/req/basic-req-2div.html"; // ターゲット URL url = new URL( str ); // 接続オブジェクト HttpURLConnection http = (HttpURLConnection)url.openConnection(); // GET メソッド http.setRequestMethod("GET"); // 接続 http.connect(); // UTF-8 でリーダーを作成 InputStreamReader isr = new InputStreamReader(http.getInputStream(), "utf8"); // 行単位で読み込む為の準備 BufferedReader br = new BufferedReader(isr); String line_buffer; // BufferedReader は、readLine が null を返すと読み込み終了 while ( null != (line_buffer = br.readLine() ) ) { // 書き込み bw.write( line_buffer + "\r\n" ); } // 閉じる br.close(); // BufferedReader isr.close(); // InputStreamReader http.disconnect(); // HttpURLConnection bw.close(); // BufferedWriter } catch( Exception e ) { System.out.println( e.getMessage() ); } } }
バイナリデータとしてそのままファイル化したものを使う
単純にダウンロードするだけならば、キャラクタセットを考慮する必要はありません
import java.net.*; import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { byte[] buffer = new byte[4096]; int readByte = 0; try { // ターゲット URL url = new URL("https://lightbox.sakura.ne.jp/demo/template/basic/basic-html/req/basic-req-2div.html"); // 接続オブジェクト HttpURLConnection http = (HttpURLConnection)url.openConnection(); // GET メソッド http.setRequestMethod("GET"); // 接続 http.connect(); DataOutputStream dataOutStream = new DataOutputStream( new BufferedOutputStream( new FileOutputStream("index.html"))); BufferedInputStream bis = new BufferedInputStream( http.getInputStream() ); // バイトでの読込み DataInputStream dis = new DataInputStream(bis); while ( -1 != (readByte = dis.read(buffer) ) ) { // コマンドプロンプトに表示 dataOutStream.write(buffer, 0, readByte); } // 各々受け持ちクラスを閉じる dis.close(); bis.close(); dataOutStream.close(); http.disconnect(); } catch( Exception e ) { } } }
関連するドキュメント
サポートされるエンコーディング ( JDK 11 )