0

URL ではなくソケットを使用してファイルをダウンロードしようとしています。次のコードでは、ファイルが完全にダウンロードされず、ファイルを開こうとすると、選択したファイルを開けないというメッセージが表示されます...このエラーは削除できますurl.openconnection() メソッドを使用しますが、ソケットを介して行う必要があります....提案が必要です。

public class Check {

private String addres;



public void FileDownload(String urladd) {
    try {
        this.addres=urladd;



        String address;
        URL url_of_file=new URL(addres);
        String hostaddress=url_of_file.getHost();
        Socket mysocket=new Socket(hostaddress, 80);
        System.out.println("Socket opened to " + hostaddress + "\n");
        String file=url_of_file.getFile();
        System.out.println(" file = "+file);


        OutputStream os = mysocket.getOutputStream();

        os.write(("GET " + file + " HTTP/1.0\r\n").getBytes("UTF-8"));
        os.write(("HOST: " + hostaddress + "\r\n").getBytes("UTF-8"));
        os.write(("\r\n").getBytes("UTF-8"));
        os.flush();


       String url = "C:\\Users\\Desktop\\file_downloaded.jpg";
       File f=new File(url);
       f.createNewFile();

        OutputStream ops = new FileOutputStream(f);

        byte data = 0;
        InputStream in=mysocket.getInputStream();



        data = (byte) in.read();
        while (data != -1) {
            ops.write(data);
            data = (byte) in.read();
        }
        ops.flush();
        ops.close();
        mysocket.close();
4

1 に答える 1

0

出力ファイルを調べると、ファイル データに加えて HTTP 応答ヘッダーが含まれていることがわかると思います (HTTP プロトコルを話しているため)。

于 2012-07-25T17:11:51.267 に答える