Android 使用其 URL 检查文件是不是存在于远程服务器中

Posted

技术标签:

【中文标题】Android 使用其 URL 检查文件是不是存在于远程服务器中【英文标题】:Android checks if file exists in a remote server using its URLAndroid 使用其 URL 检查文件是否存在于远程服务器中 【发布时间】:2014-06-30 15:26:23 【问题描述】:

我希望我的 android 程序使用其 URL 检查文件(例如 index.php)是否存在于远程服务器中。即,如果我单击按钮,它应该检查 url 是否存在。如果是,它应该加载相同的 URL,否则会显示消息“文件不存在!”

我做了这样的事情:

   private OnClickListener cameraListener9=new OnClickListener()
    public void onClick(View v)

    idNo=editText.getText().toString();

    String URLName ="http://blahblah/kufpt/upload_test/"+ idNo + "/index.php";

    boolean bResponse = exists(URLName);
    if (bResponse==true)
    
        Toast.makeText(MainActivity.this, "FILE EXISTS" , Toast.LENGTH_SHORT).show();
        WebView mWebView =(WebView)findViewById(R.id.webView);
        mWebView.loadUrl(URLName);

    
    else
        Toast.makeText(MainActivity.this, "File does not exist!", Toast.LENGTH_SHORT).show();

    
;

/* 这是检查 index.php 文件是否存在或已创建的函数 */ 如Check if file exists on remote server using its URL 中所建议的那样

    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;
    
  

但是,即使文件确实存在于指定文件夹中,这也总是给我一个错误的返回值。只是一次绝望的尝试,我尝试显示 con.getResponsecode() 的值,它总是给我一个 0 值。任何人都可以帮助我为什么输出会这样?

【问题讨论】:

您是否在清单中添加了Internet 权限? 您可能遇到了异常。如果是这样,您可以发布例外情况吗? @Coderji 感谢您的回复。我的清单中确实有互联网许可: @Henry 不,我没有遇到任何异常。我的意思是,我尝试显示 getResponseCode 和 HttpURLConnection.HTTP_OK 的结果,这总是分别给我 0 和 200,这让我相信没有例外。问题是不确定这段代码是否真的建立了与服务器的连接。 【参考方案1】:

我相信你是在你的主线程中这样做的。这就是它不工作的原因,你不能在你的主线程中执行网络操作。

尝试将代码放在 AsyncTask 或 Thread 中。

编辑 1:作为一种快速修复,尝试像这样包装您的“文件检查代码”:

    new Thread() 

        public void run() 
        //your "file checking code" goes here like this
        //write your results to log cat, since you cant do Toast from threads without handlers also...

      try 
         HttpURLConnection.setFollowRedirects(false);
         // note : you may also need
         //HttpURLConnection.setInstanceFollowRedirects(false)

         HttpURLConnection con =  (HttpURLConnection) new URL(URLName).openConnection();
         con.setRequestMethod("HEAD");
         if( (con.getResponseCode() == HttpURLConnection.HTTP_OK) ) 
            log.d("FILE_EXISTS", "true");
         else 
            log.d("FILE_EXISTS", "false");
 
              catch (Exception e) 
                e.printStackTrace();
               log.d("FILE_EXISTS", "false");;
           
             
      .start();    

【讨论】:

SirJanBo,它有效!非常感谢......如果文件确实存在,它会给我 200,如果不存在,它会给我 404。但只是一个后续问题,是否可以使用 WebView 在该线程中加载 url?当我插入这行代码时,它似乎不起作用: if( (con.getResponseCode() == HttpURLConnection.HTTP_OK) ) Log.d("FILE_EXISTS", "true"); WebView mWebView =(WebView)findViewById(R.id.webView); mWebView.loadUrl(URLName); 彻底解决了问题,别管后续问题了!再次感谢 @JanBo 先生!.. 你拯救了我的一天!

以上是关于Android 使用其 URL 检查文件是不是存在于远程服务器中的主要内容,如果未能解决你的问题,请参考以下文章

如何检查文件是不是存在于android设备的特定文件夹中

检查 URL 文件是不是存在

检查url图片是不是存在

如何使用角度检查来自url的文件是不是存在?

检查 URL 是不是存在

如何通过 PHP 检查 URL 是不是存在?