首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >来自URL的InputStream

来自URL的InputStream
EN

Stack Overflow用户
提问于 2011-08-04 03:48:09
回答 3查看 179.7K关注 0票数 137

如何从URL中获取InputStream?

例如,我希望获取url中的文件,并通过wwww.somewebsite.com/a.txt将其作为InputStream读取。

我试过了

代码语言:javascript
复制
InputStream is = new FileInputStream("wwww.somewebsite.com/a.txt");

但我得到的是一个错误:

代码语言:javascript
复制
java.io.FileNotFoundException
EN

回答 3

Stack Overflow用户

发布于 2011-08-04 03:51:32

尝试:

代码语言:javascript
复制
final InputStream is = new URL("http://wwww.somewebsite.com/a.txt").openStream();
票数 20
EN

Stack Overflow用户

发布于 2014-12-24 17:40:23

您的原始代码使用FileInputStream,它用于访问文件系统托管的文件。

您使用的构造函数将尝试在当前工作目录(系统属性user.dir的值)的www.somewebsite.com子文件夹中定位一个名为a.txt的文件。您提供的名称将使用file类解析为文件。

URL对象是解决此问题的通用方法。您可以使用URL访问本地文件,也可以访问网络托管的资源。除了http://或https://之外,URL类还支持file://协议,所以您可以放心了。

票数 4
EN

Stack Overflow用户

发布于 2017-12-18 01:53:17

下面是一个完整的示例,它读取给定网页的内容。该网页是从HTML表单读取的。我们使用标准的InputStream类,但使用JSoup库可以更容易地完成这项工作。

代码语言:javascript
复制
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>

</dependency>

<dependency>
    <groupId>commons-validator</groupId>
    <artifactId>commons-validator</artifactId>
    <version>1.6</version>
</dependency>  

这些是Maven依赖项。我们使用Apache Commons库来验证URL字符串。

代码语言:javascript
复制
package com.zetcode.web;

import com.zetcode.service.WebPageReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "ReadWebPage", urlPatterns = {"/ReadWebPage"})
public class ReadWebpage extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/plain;charset=UTF-8");

        String page = request.getParameter("webpage");

        String content = new WebPageReader().setWebPageName(page).getWebPageContent();

        ServletOutputStream os = response.getOutputStream();
        os.write(content.getBytes(StandardCharsets.UTF_8));
    }
}

ReadWebPage servlet读取给定网页的内容,并以纯文本格式将其发送回客户机。读取页面的任务被委派给WebPageReader

代码语言:javascript
复制
package com.zetcode.service;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import org.apache.commons.validator.routines.UrlValidator;

public class WebPageReader {

    private String webpage;
    private String content;

    public WebPageReader setWebPageName(String name) {

        webpage = name;
        return this;
    }

    public String getWebPageContent() {

        try {

            boolean valid = validateUrl(webpage);

            if (!valid) {

                content = "Invalid URL; use http(s)://www.example.com format";
                return content;
            }

            URL url = new URL(webpage);

            try (InputStream is = url.openStream();
                    BufferedReader br = new BufferedReader(
                            new InputStreamReader(is, StandardCharsets.UTF_8))) {

                content = br.lines().collect(
                      Collectors.joining(System.lineSeparator()));
            }

        } catch (IOException ex) {

            content = String.format("Cannot read webpage %s", ex);
            Logger.getLogger(WebPageReader.class.getName()).log(Level.SEVERE, null, ex);
        }

        return content;
    }

    private boolean validateUrl(String webpage) {

        UrlValidator urlValidator = new UrlValidator();

        return urlValidator.isValid(webpage);
    }
}

WebPageReader验证该URL并读取网页内容。它返回一个包含页面HTML代码的字符串。

代码语言:javascript
复制
<!DOCTYPE html>
<html>
    <head>
        <title>Home page</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <form action="ReadWebPage">

            <label for="page">Enter a web page name:</label>
            <input  type="text" id="page" name="webpage">

            <button type="submit">Submit</button>

        </form>
    </body>
</html>

最后,这是包含HTML表单的主页。这篇文章摘自我关于这个话题的tutorial

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6932369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档