Каков предпочтительный способ чтения / записи содержимого с URL в Java - PullRequest
4 голосов
/ 19 мая 2010

Каков предпочтительный способ открыть соединение с веб-сайтом, а затем впоследствии прочитать информацию на этой странице? Кажется, есть много конкретных вопросов о разных частях, но нет четких и простых примеров.

Ответы [ 4 ]

5 голосов
/ 19 мая 2010

Получение текста с URL | Пример депо :

try {
    // Create a URL for the desired page
    URL url = new URL("http://hostname:80/index.html");

    // Read all the text returned by the server
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    String str;
    while ((str = in.readLine()) != null) {
        // str is one line of text; readLine() strips the newline character(s)
    }
    in.close();
} catch (MalformedURLException e) {
} catch (IOException e) {
}

Когда дело доходит до «записи» в URL, я полагаю, вам нужно что-то вроде Отправка запроса POST с использованием URL | Пример депо .

1 голос
/ 19 мая 2010

Вы можете просто использовать это:

InputStream stream = new URL( "http://google.com" ).openStream();
1 голос
/ 19 мая 2010

У Sun Microsystems на самом деле есть учебник по чтению и письму с URLConnection на эту тему, который будет хорошей отправной точкой.

0 голосов
/ 07 июня 2010

Хорошо бы начать с статьи Sun Microsystems , на которую ссылается SB. Однако я определенно не назвал бы это предпочтительным способом. Сначала он излишне выдает исключение, затем он окончательно не закрывает потоки. Кроме того, он использует метод url.openStream , с которым я не согласен, поскольку он все равно может получать выходные данные, даже если возвращается ошибка HTTP .

Вместо url.openStream пишем:

HttpURLConnection conn=(HttpURLConnection) url.openConnection()
//Any response code starting with 2 is acceptable
if(!String.valueOf(conn.getResponseCode()).startsWith('2'))
    //Provide a nice useful exception
    throw new IOException("Incorrect response code "+conn.getResponseCode()+" Message: " +getResponseMessage());
InputStream rawIn=conn.getInputStream()
OutputStream rawOut=conn.getOutputStream()
//You may want to add buffering to reduce the number of packets sent
BufferedInputStream bufIn=new BufferedInputStream(rawIn);
BufferedOutputStream bufOut=new BufferedInputStream(rawOut);

НЕ ИСПОЛЬЗУЙТЕ ЭТОТ КОД БЕЗ ОБРАБОТКИ ИСКЛЮЧЕНИЙ ИЛИ ЗАКРЫТИЯ ПОТОКОВ! . Это на самом деле довольно сложно сделать правильно. Если вы хотите узнать, как это сделать правильно, посмотрите мой ответ на гораздо более конкретный вопрос выборки изображений в Android , поскольку я не хочу переписывать все это здесь ,

Теперь при получении ввода с сервера, если вы не пишете инструмент командной строки, вы захотите запустить его в отдельном потоке и отобразить диалог загрузки. Ответ Сгармана демонстрирует это с использованием основных потоков Java, а мой ответ на этот вопрос с использованием класса AsyncTask из Android, чтобы сделать его более аккуратным. Файл класса не имеет зависимостей Android, и лицензия Apache, поэтому вы можете использовать его в проектах, отличных от Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...