Как читать текстовый файл прямо из Интернета с помощью Java? - PullRequest
40 голосов
/ 07 июня 2011

Я пытаюсь прочитать некоторые слова из текстового файла в Интернете.

Я пытался сделать что-то подобное

File file = new File("http://www.puzzlers.org/pub/wordlists/pocket.txt");
Scanner scan = new Scanner(file);

но это не сработало, я получаю

http://www.puzzlers.org/pub/wordlists/pocket.txt 

как вывод, и я просто хочу получить все слова.

Я знаю, что они научили меня тому назад, но я не помню точно, как это сделать сейчас, любая помощь очень ценится.

Ответы [ 8 ]

59 голосов
/ 07 июня 2011

Используйте URL вместо File для любого доступа, которого нет на вашем локальном компьютере.

URL url = new URL("http://www.puzzlers.org/pub/wordlists/pocket.txt");
Scanner s = new Scanner(url.openStream());

На самом деле, URL еще более полезен, в том числе для локального доступа (используйте file: URL), jar-файлов и всего, что можно каким-либо образом извлечь.

Способ выше интерпретирует файл в кодировке по умолчанию вашей платформы. Если вы хотите вместо этого использовать кодировку, указанную сервером, вы должны использовать URLConnection и проанализировать его тип содержимого, как указано в ответах на этот вопрос .


О вашей ошибке, убедитесь, что ваш файл компилируется без ошибок - вам нужно обработать исключения. Нажмите на красные сообщения, данные вашей IDE, и вы увидите рекомендации, как это исправить. Не запускайте программу, которая не компилируется (даже если IDE позволяет это).

Вот несколько примеров обработки исключений:

try {
   URL url = new URL("http://www.puzzlers.org/pub/wordlists/pocket.txt");
   Scanner s = new Scanner(url.openStream());
   // read from your scanner
}
catch(IOException ex) {
   // there was some connection problem, or the file did not exist on the server,
   // or your URL was not in the right format.
   // think about what to do now, and put it here.
   ex.printStackTrace(); // for now, simply output it.
}
12 голосов
/ 07 июня 2011

попробуйте что-то вроде этого

 URL u = new URL("http://www.puzzlers.org/pub/wordlists/pocket.txt");
 InputStream in = u.openStream();

Затем используйте его как любой простой старый входной поток

7 голосов
/ 20 ноября 2014

Что действительно сработало для меня: (источник: документация оракула "чтение URL")

 import java.net.*;
 import java.io.*;

 public class UrlTextfile {
public static void main(String[] args) throws Exception {

    URL oracle = new URL("http://yoursite.com/yourfile.txt");
    BufferedReader in = new BufferedReader(
    new InputStreamReader(oracle.openStream()));

    String inputLine;
    while ((inputLine = in.readLine()) != null)
        System.out.println(inputLine);
    in.close();
}
 }
4 голосов
/ 04 ноября 2014

Использование Apache Commons IO:

import org.apache.commons.io.IOUtils;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public static String readURLToString(String url) throws IOException
{
    try (InputStream inputStream = new URL(url).openStream())
    {
        return IOUtils.toString(inputStream, StandardCharsets.UTF_8);
    }
}
2 голосов
/ 26 июля 2013

Я сделал это следующим образом для изображения, вы должны быть в состоянии сделать это для текста, используя аналогичные шаги.

// folder & name of image on PC          
File fileObj = new File("C:\\Displayable\\imgcopy.jpg"); 

Boolean testB = fileObj.createNewFile();

System.out.println("Test this file eeeeeeeeeeeeeeeeeeee "+testB);

// image on server
URL url = new URL("http://localhost:8181/POPTEST2/imgone.jpg"); 
InputStream webIS = url.openStream();

FileOutputStream fo = new FileOutputStream(fileObj);
int c = 0;
do {
    c = webIS.read();
    System.out.println("==============> " + c);
    if (c !=-1) {
        fo.write((byte) c);
    }
} while(c != -1);

webIS.close();
fo.close();
2 голосов
/ 07 июня 2011

Для входного потока старой школы используйте этот код:

  InputStream in = new URL("http://google.com/").openConnection().getInputStream();
1 голос
/ 28 мая 2016

Используйте этот код для чтения интернет-ресурса в String:

public static String readToString(String targetURL) throws IOException
{
    URL url = new URL(targetURL);
    BufferedReader bufferedReader = new BufferedReader(
            new InputStreamReader(url.openStream()));

    StringBuilder stringBuilder = new StringBuilder();

    String inputLine;
    while ((inputLine = bufferedReader.readLine()) != null)
    {
        stringBuilder.append(inputLine);
        stringBuilder.append(System.lineSeparator());
    }

    bufferedReader.close();
    return stringBuilder.toString().trim();
}

Это основано на здесь .

0 голосов
/ 15 августа 2016

Кроме того, вы можете использовать Ресурсы Гуавы объект:

URL url = new URL("http://www.puzzlers.org/pub/wordlists/pocket.txt");
List<String> lines = Resources.readLines(url, Charsets.UTF_8);
lines.forEach(System.out::println);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...