Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:url.openStream()的文件类型`_Java_File_Url_Stream - Fatal编程技术网

Java:url.openStream()的文件类型`

Java:url.openStream()的文件类型`,java,file,url,stream,Java,File,Url,Stream,我写这个方法是为了下载一个给定URL的网页。它设计为只下载HTML。如果我想做错误检查并且只允许HTML,我应该怎么做 public static String download(URL url) throws IOException { InputStream is = url.openStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String page

我写这个方法是为了下载一个给定URL的网页。它设计为只下载HTML。如果我想做错误检查并且只允许HTML,我应该怎么做

public static String download(URL url) throws IOException {
    InputStream is = url.openStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    String page = "";
    String line;    
    while((line = reader.readLine()) != null){
        page = page + line;
    }
    return page;
}
最初我打算这样做:

String file = url.getFile();
if(file.subString(file.indexOf("."),file.length()-1).equalsIgnoreCase("HTML")){
    // do method

但是URL:
http://www.smu.com
url.getFile()
返回
”。有人有什么建议吗

要测试您是否获得html,可以使用URL.openConnection()获取URL连接,然后可以调用getContentType(),该函数应该为html页面返回“text/html”。然后,您可以在UrlConnection()上使用getInputStream()方法作为url.openStream()的插入替换

如果您确实想验证服务器发送给您的内容是否为HTML,则需要找到HTML验证库。对不起,我现在还不知道

需要考虑的原因,这可能是为什么www. SUMUCOM不返回数据,是因为根据HTTP连接上发送的用户代理字符串,许多网站将提供不同的数据。您可能需要在您的UrlConnection上修改它:UrlConnection.addRequestProperty(“用户代理”,…);请参见此处的更多信息:

“http://www.smu.com“将中的数据发送给您”http://www.smu.com/index.html". 这是请求“/”时web服务器的(常见)行为(理论上,web服务器也可以使用302或诸如此类的命令重定向)。因此,检查URL是否以“.html”结尾完全是愚蠢的(更不用说它可能是“.php”、“.asp”或其他任何形式)

然而,提供HTML的优秀web服务器应该返回“text/HTML”的
内容类型
头。(这当然是假设它返回的是HTML,而不是XHTML、XML或诸如此类的东西,并且web服务器没有损坏)

您可能会希望使用。这是一个例子

我如何确定顶部位

我运行了
curl-I
(和../index.html)并比较了结果。它们看起来像:

HTTP/1.1 200 OK
Date: Tue, 19 Oct 2010 18:01:39 GMT
Server: Apache
Last-Modified: Wed, 27 Jan 2010 20:27:52 GMT
Accept-Ranges: bytes
Content-Length: 2993
Content-Type: text/html

如果您想在检查
内容类型
标题之外检查内容,那么您可以使用HTML解析器,例如(名称错误!)。

smu.com确实返回数据,URL只是没有文件部分(斜杠后)@Bart请求尝试获取“/”web服务器愉快地返回“/index.HTML”(这取决于web服务器和这样的配置——它可能只是愉快地返回了404,但这对web用户来说并不友好)。它没有解释“没有数据”,但它确实解释了为什么不需要“完整路径”。更多信息,请参阅我的答案(尽管已经接受这个答案)@pst:我知道,我是这么说的,但你说得好多了