一个以流方式读取文件的方式,可以设置超时时间

代码

using System;
using System.Xml;
using System.Text;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;
 
namespace blogdata.nms_common
{
       ///<summary>
       ///定义获得数据流接口
       ///</summary>
       public interface IRequestable
       {
              Stream GetStream(string requestUrl);
       }
       ///<summary>
       /// Http 的摘要说明
       ///</summary>
       public class Http : IRequestable
       {
              ///<summary>
              ///设置请求的延时时间,以秒为单位
              ///</summary>
              private int mTimeOut = 1;
              ///<summary>
              /// ̉异常错误信息
              ///</summary>
              public string errorMessage;
              public string ErrorMessage
              {
                     get {return this.errorMessage;}
              }
              ///<summary>
              ///构造函数
              ///</summary>
              public Http(int timeOut)
              {
                     this.mTimeOut = timeOut * 1000;   
              }
              ///<summary>
              ///用方法隐藏成员
              ///</summary>
              ///<param name="timeOut"></param>
              ///<returns></returns>
              public static Http GetIntance(int timeOut)
              {
                     return new Http(timeOut);
              }
              ///<summary>
              ///重载用方法隐藏成员,默认为1秒
              ///</summary>
              public static Http GetIntance()
              {
                     return new Http(1);
              }
 
              #region IRequestface ³ÉÔ±
              ///<summary>
              ///实现接口
              ///</summary>
              ///<param name="requestUrl"></param>
              ///<returns></returns>
              public Stream GetStream(string requestUrl)
              {
                     return GetStream(requestUrl,null);
              }
              ///<summary>
              ///重载接口
              ///</summary>
              ///<param name="requestUrl"></param>
              ///<param name="postData"></param>
              ///<returns></returns>
              public Stream GetStream(string requestUrl,byte[] postData)
              {
                     if (requestUrl == null || requestUrl.Length == 0) return null;
                     //判断有没有http://头
                     string httpHead = requestUrl.Substring(0,7);
                     if (httpHead.ToLower() != "http://") return null;
                     WebRequest wrq = WebRequest.Create(requestUrl);
                     wrq.Timeout = this.mTimeOut; //请求的时间,以秒为单位
                            if (postData != null)
                            {
                                   wrq.Method = "POST";
                                   wrq.ContentType =
                                          "application/x-www-form-urlencoded";
                                   wrq.ContentLength = postData.Length;
                                   Stream rs = wrq.GetRequestStream();
                                   rs.Write(postData,0,postData.Length);
                                   rs.Close();
                                   rs = null;
                            }
                     try
                     {
                            WebResponse wrp = wrq.GetResponse();
                            Stream res = wrp.GetResponseStream();
                            if(res != null) return res;
                     }
                     catch (WebException we)
                     {
                            //调试使用,也可以转化为流输出,我没有转化
                            this.errorMessage = we.Message;
                     }
                     return null;
              }
              #endregion
       }
}

调用方法:
Stream gets = Http.GetIntance(timeout).GetStream(url);
//这里可以判断一下流
if (gets == null)
          Response.Write("error");
else
{
          //由于有些域名的访问是返回了北京宽带网或者其他的错误信息。因此不能捕获异常,结果为:流 !=null 通过读出流看一下数据,就明白了。
         Encoding encode =
         System.Text.Encoding.GetEncoding("gb2312");
         //读流
         StreamReader reader = new StreamReader(gets, encode);
         string str = reader.ReadToEnd().ToString();
         Response.Write(str);
}
注:
1、这里就不要捕获异常了。如果返回的为:null则就是发生了异常。因为我在类里面
已经处理异常了。
2、Url必须为完整的路径
即:带有http://标志,否则不能访问

时间: 2024-08-03 00:40:48

一个以流方式读取文件的方式,可以设置超时时间的相关文章

一个简单的读取文件为啥搞成了死循环?

问题描述 import java.io.*; public class TestMove{private static File f1=null;private static File f2=null;private static FileInputStream fis=null;private static FileOutputStream fos=null; public static void main(String []args){new TestMove("D:\f1\file1.tx

有办法给一个方法设置超时时间不

问题描述 方法F(),当我想让F最多执行一分钟,如果一分钟还没结束就继续往下走,运行后面的代码实际情况中F很快就可以结束,现在有的时候会出异常,导致F很久都执行不完,导致后面的流程延迟太大的 解决方案 解决方案二:另启一个线程,执行F(),结束之后,notify原来的线程,同时再判断一下执行时间,如果超时的话就不要再做下去了.原来的线程wait(60000L)解决方案三:这要看F方法的代码自己是否能够控制,如果不能控制的话,则只能采用一楼的这种办法.如果F方法的代码自己可以控制的话,则可以另起一

java io读取文件到String

  public static String loadAFileToStringDE1(File f) throws IOException {          long beginTime = System.currentTimeMillis();        InputStream is = null;        String ret = null;        try {            is = new BufferedInputStream( new FileInput

通过url读取文件路径的问题

问题描述 各位好,最近遇到一个通过url读取文件路径的问题我期望是读取某一个包下面的东西代码如下:StringpackagePath="com.common.keys";ClassLoadercld=Thread.currentThread().getContextClassLoader();//获取包urlURLurl=cld.getResource(packagePath.replaceAll("\.","/"));//构建文件Filefil

Relational 1.1发布 读取文件相互关系工具

Relational是一个接口用于读取文件中加载的相互关系,写入关系代数查询,并查看他们的结果.该软件是以教育为目的的,因为它根据查询的正确与否来确定评估.对于开发者而言,它提供了一个关系代数的Python模块,可以在其他项目中使用. Relational 1.1此版本包括一个关系编辑器,不再需要外部编辑.它使用正则表达式来禁止无效的属性名称,并为用户提供更多不正确关系的反馈.支持PySide在Mac上更容易安装依赖关系.对于开发者,API已经更改,现在可以接受不是UTF-8编码的字符串Unic

内存映射-C#用seek一次读取1M的方式上传一个大文件为什么依然占用如此大的内存

问题描述 C#用seek一次读取1M的方式上传一个大文件为什么依然占用如此大的内存 C#用seek一次读取1M的方式上传一个大文件为什么依然占用如此大的内存,必须用内存映射吗? 解决方案 你肯定频繁的new数组了,用一个公共的空间吧 解决方案二: 为什么依然占用如此大的内存,具体是多大呢? 建议你监控一个内存的使用,是哪段代码引起的.一句句进行调试应该就可以发现,如果不能可以考虑增加一个 Sleep 语句. 按正常来说,打开文件,与 Seek 操作不需要多少内存的.只有读时,需要分配读数据的空间

c++-C++下如何从读取文件内的数据并且排序然后输出到另外一个文件

问题描述 C++下如何从读取文件内的数据并且排序然后输出到另外一个文件 如题 大一新手 自学太累了 希望有引路人 拜托各位了 谢谢! 解决方案 即便你学会了,写起来也要好多行,建议你用C#吧.实现整个需求只要1行代码就行了: File.WriteAllLines("输出文件.txt", File.ReadAllLines("文件名.txt").OrderBy(x => 排序条件)); 解决方案二: 自学太累?是你没有用心吧.偶也是自学走过来的,非计算机及相关专

linux c语言 把一个文件用二进制方式打开,给一个二进制数串向文件中匹配。

问题描述 linux c语言 把一个文件用二进制方式打开,给一个二进制数串向文件中匹配. linux c语言 把一个文件用二进制方式打开,给一个二进制数串向文件中匹配.文件比如是asd.exe,给出的字符串:010001010101010 菜鸟急求答案,感激不尽. 解决方案 fopen的时候用rb方式打开,然后fread读取.再比较 解决方案二: [VBA] 以二进制方式打开文件vbscript脚本用二进制方式读写文件读取一个结构体记录的二进制文件

代码-从服务器上下载的压缩文件,通过流的方式怎么读取文件中的内容。

问题描述 从服务器上下载的压缩文件,通过流的方式怎么读取文件中的内容. 如何用java代码实现压缩文件的读取? 例如从银行服务器上下载对账文件后,为了不在本地保存文件. 压缩文件中的文件格式是俩个文本文件,怎么用流的方式读取到压缩文件中的文件内容. 解决方案 ZipEntry http://daoshud1.iteye.com/blog/2012362 解决方案二: http://www.cnblogs.com/kgdxpr/archive/2013/05/20/3088254.html 解决方