无法从java中的URL下载文件

我正在制作一个从URL下载文件的程序。 下载始终开始,但尚未完成。 例如,如果文件的大小为3 MB,程序下载只有一半,所以我无法打开下载的文件。 但程序说该文件已成功下载。

public class FileDownloader { public static void main (String [] args) throws IOException { InputStream fileIn; FileOutputStream fileOut; Scanner s = new Scanner(System.in); System.out.println("Enter URL: "); String urlStr = s.nextLine(); URL url = new URL(urlStr); URLConnection urlConnect = url.openConnection(); fileIn = urlConnect.getInputStream(); System.out.println("Enter file name: "); String fileStr = s.nextLine(); fileOut = new FileOutputStream(fileStr); while (fileIn.read() != -1) { fileOut.write(fileIn.read()); } System.out.println("File is downloaded"); } } 

那我怎么解决呢? 应该用另一种方式下载?

你丢失了每个备用byte

  while (fileIn.read() != -1) { //1st read fileOut.write(fileIn.read()); //2nd read - 1st write } 

你正在读两次,只写一次。

你需要做的是

  int x; while ((x = fileIn.read()) != -1) { //1st read fileOut.write(x); //1st write } 

这是您的完整代码

 import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.util.Scanner; public class FileDownloader { public static void main(String[] args) throws IOException { InputStream fileIn; FileOutputStream fileOut; Scanner s = new Scanner(System.in); System.out.println("Enter URL: "); String urlStr = s.nextLine(); URL url = new URL(urlStr); URLConnection urlConnect = url.openConnection(); fileIn = urlConnect.getInputStream(); System.out.println("Enter file name: "); String fileStr = s.nextLine(); fileOut = new FileOutputStream(fileStr); int x; while ((x = fileIn.read()) != -1) { fileOut.write(x); } System.out.println("File is downloaded"); } 

您可以有效地下载包含以下代码的大文件。

  public static void main(String[] args) throws IOException { InputStream in = null; FileOutputStream out = null; try { System.out.println("Starting download"); long t1 = System.currentTimeMillis(); URL url = new URL(args[0]);// or you can hard code the URL // Open the input and out files for the streams HttpURLConnection conn = (HttpURLConnection) url.openConnection(); in = conn.getInputStream(); out = new FileOutputStream(args[1]);//// or you can hard code the filename // Read data into buffer and then write to the output file byte[] buffer = new byte[8192]; int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } long t2 = System.currentTimeMillis(); System.out.println("Time for download & save file in millis:"+(t2-t1)); } catch (Exception e) { // Display or throw the error System.out.println("Erorr while execting the program: " + e.getMessage()); } finally { // Close the resources if (in != null) { in.close(); } if (out != null) { out.close(); } } } 

只是简单地使用这个:

 import org.apache.commons.io.FileUtils; import java.net.URL; String path = "F:/" String fileName = "song" FileUtils.copyURLToFile(myUrl, new File(path + fileName + ".mp3"));