0

How can I check in Java if a file exists on a remote server having the URL? If it is then download the file.

Here is my code sample - it opens the specified URL and then creates I/O streams to copy the file specified by the URL. But eventually it's not working as it supposed to do.

URL url = new URL(" //Here is my  URL");     
url.openConnection();      
InputStream reader = url.openStream();      
FileOutputStream writer = new FileOutputStream("t");    
byte[] buffer = new byte[153600];    
int bytesRead = 0;    
while ((bytesRead = reader.read(buffer)) > 0)    
{    
    writer.write(buffer, 0, bytesRead);    
    buffer = new byte[153600];    
}    
writer.close();    
reader.close();  
4

3 に答える 3

2

これでできます

public static boolean exists(String URLName){
    try {
      HttpURLConnection.setFollowRedirects(false);
      // note : you may also need
      //        HttpURLConnection.setInstanceFollowRedirects(false)
      HttpURLConnection con =
         (HttpURLConnection) new URL(URLName).openConnection();
      con.setRequestMethod("HEAD");
      return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
    }
    catch (Exception e) {
       e.printStackTrace();
       return false;
    }
  }
于 2013-07-22T09:32:56.710 に答える
1

サーバーに Head Request を送信して、ファイルの存在を確認します。

import java.net.*;
import java.io.*;

    public static boolean fileExists(String URL){
    try {
        HttpURLConnection.setFollowRedirects(false);
        HttpURLConnection con = (HttpURLConnection) new URL(URLName).openConnection();
        con.setRequestMethod("HEAD");
        if(con.getResponseCode() == HttpURLConnection.HTTP_OK)
            return true;
        else
            return false;
     }
     catch (Exception e) {
        e.printStackTrace();
        return false;
        }
    }
于 2013-07-22T09:34:10.640 に答える
0

ファイルが存在しない場合、url.openConnection() は FileNotFoundException をスローしますが、それをキャッチできます。それ以外は、あなたのコードは問題ないように見えますが、私の見解では BufferedInputStream / BufferedOuputStream を使用し、バイト単位で読み書きするときれいになります。

于 2013-07-22T09:55:23.113 に答える