java - 尝试从网站获取一行源代码

标签 java html

我正在尝试从网站获取一行源代码,然后将该行返回到主程序。我在定义 InputStream 的行不断收到错误。为什么我在这一行收到错误?

public class MP3LinkRetriever
{
    private static String line;

public static void main(String[] args)
{
    String link = "www.google.com";
    String line = "";

    while (link != "")
    {
        link = JOptionPane.showInputDialog("Please enter the link");

        try
        {
            line = Connect(link);
        }
        catch(Exception e)
        {
        }

        JOptionPane.showMessageDialog(null, "MP3 Link: " + parseLine(line));


        String text = line;

        Toolkit.getDefaultToolkit( ).getSystemClipboard()
        .setContents(new StringSelection(text), new ClipboardOwner()
        { 
            public void lostOwnership(Clipboard c, Transferable t) { } 
        });

        JOptionPane.showMessageDialog(null, "Link copied to your clipboard");

    }
}

public static String Connect(String link) throws Exception { 

    String strLine = null; 
    InputStream in = null; 
    try { 
        URL url = new URL(link); 
        HttpURLConnection uc = (HttpURLConnection) url.openConnection(); 

        in = new BufferedInputStream(uc.getInputStream()); 

        Reader re = new InputStreamReader(in); 

        BufferedReader r = new BufferedReader(re); 

        int index = -1; 

        while ((strLine = r.readLine()) != null && index == -1) { 
            index = strLine.indexOf("<source src"); 
        } 

    } finally { 
        try { 
            in.close(); 
        } catch (Exception e) { 
        } 
    } 

    return strLine; 
} 


public static String parseLine(String line)
{
    line = line.replace("<source", "");
    line = line.replace(" src=", "");
    line = line.replace("\"", "");
    line = line.replace("type=", "");
    line = line.replace("audio/mpeg", "");
    line = line.replace(">", "");

    return line;
}

}

最佳答案

strLine = r.readLine();将返回null当它到达内容末尾时,但您没有检查 null 的可能性在您阅读该行之后并在代码中使用它之前...

尝试类似...

while ((strLine = r.readLine()) != null && index == -1) {
    index = strLine.indexOf("<source src");
}

此外,请确保在离开方法之前关闭 Steam ...

InputStream in = null;
try {
    // The rest of your code...
} finally {
    try {
        in.close();
    } catch (Exception exp) { // We don't really care about this one..
    }
}

已更新 - 完整示例

这是我正在使用的测试代码并且工作正常......

public class TestWebDownload {

    public static void main(String[] args) {
        try {
            Connect("http://www.google.com.au");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static String Connect(String link) throws Exception {

        String strLine = null;
        InputStream in = null;
        try {
            URL url = new URL(link);
            HttpURLConnection uc = (HttpURLConnection) url.openConnection();

            in = new BufferedInputStream(uc.getInputStream());

            Reader re = new InputStreamReader(in);

            BufferedReader r = new BufferedReader(re);

            int index = -1;

            while ((strLine = r.readLine()) != null && index == -1) {
                index = strLine.indexOf("<source src");
            }

        } finally {
            try {
                in.close();
            } catch (Exception e) {
            }
        }

        return strLine;
    }
}

更新

您的新问题与您的旧问题类似,您没有预料到传递给您的信息可能不正确或无效...

public static String parseLine(String line)
{

    // What if line is null ??
    line = line.replace("<source", "");
    line = line.replace(" src=", "");
    line = line.replace("\"", "");
    line = line.replace("type=", "");
    line = line.replace("audio/mpeg", "");
    line = line.replace(">", "");

    return line;
}

关于java - 尝试从网站获取一行源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12557471/

相关文章:

java - 非商业用途的库依赖兼容性

jquery - 移动 View 中的 Bootstrap 页脚搜索栏变小

php - 欧元符号从 PHP 导出 excel

html - 使用 Excel 打开包含 HTML 的 UTF-8 CSV

javascript - 运行带有Ajax问题的Python

java - 刀柄不同步

java - 原子能保证可见性吗? java

java - hibernate/JPA : Remove from multiple parents when child is deleted

java - Guice 是否支持方法注入(inject)(非 setter 注入(inject))?

html - YouTube嵌入在播放时会扩大-Google如何做到这一点?