Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不要下载完整的文件_Java_File_Sockets_Download - Fatal编程技术网

Java 不要下载完整的文件

Java 不要下载完整的文件,java,file,sockets,download,Java,File,Sockets,Download,我尝试使用套接字而不是url下载文件。。如果使用以下代码,则文件不可用 完全下载,当我尝试打开文件时,它会显示 无法打开所选文件的消息。。。可以通过使用删除此错误 openconnection()方法,但它需要通过套接字完成。。。。我需要建议 public class Check { private String addres; public void FileDownload(String urladd) { try { this.addres=urladd;

我尝试使用套接字而不是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();

如果您检查输出文件,我怀疑您会发现除了文件数据之外,它还包含一个HTTP响应头(因为您使用的是HTTP协议)。

为什么您需要通过套接字而不是HttpURLConnection执行此操作?简而言之,我想通过特定的网络接口下载一个文件。。。使用url,我没有找到任何java代码从我的系统的特定网络接口(WiFi或以太网)下载文件…但是使用socket,我可以创建一个套接字并绑定到特定接口,然后通过该网络接口发送请求和接收数据…@ArseIsonline-在某种编辑器/查看器中打开文件。