InputStream连接到URL但不返回任何内容

时间:2015-11-21 05:35:56

标签: java android url inputstream

我将InputStream设置为在线托管的原始文本文件的URL。每行都是不同的说法,方法应该是从文件中获取文本并将其保存到缓存文件夹以便在应用程序中使用。连接到URL没有问题,否则它会在日志中给出FileNotFoundException(测试过这个),并且生成缓存文件,但它不会将任何内容保存到缓存文件中(具有权限,也经过测试)。造成这种情况的原因是什么?

从页面阅读的代码:

protected Void doInBackground(Void... Params) {
    try {
        File quote = new File("Absolute path to cache");
        URL url = new URL("URL of file");
        InputStream is = url.openStream();
        OutputStream os = new FileOutputStream(quote);
        byte[] buffer = new byte[is.available()];
        is.read(buffer);
        os.write(buffer);
        is.close();
        os.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

2 个答案:

答案 0 :(得分:1)

根据连接,is.available()可能有效,也可能无效 - 函数将返回零,导致您不向输出流写入任何内容。

执行此操作的最佳方法是阅读,直到无法再读取数据 - 例如见here

答案 1 :(得分:-1)

试试这个。

@Override
   protected void doInBackground(Void... Params) {
      try{
        File quote = new File("Absolute path to cache");
        URL url = new URL("URL of file");
        HttpURLConnection httpCon =
      (HttpURLConnection) url.openConnection();

       if(httpCon.getResponseCode() != 200)
          throw new Exception("Failed to connect");
       }

       InputStream is = httpCon.getInputStream();
       OutputStream os = new FileOutputStream(quote);
       byte[] buffer = new byte[is.available()];
       is.read(buffer);
       os.write(buffer);
       is.close();
       os.close();

       }catch(Exception e){
         e.printTrackTrace();
       }
       return null;
   }