web-dev-qa-db-fra.com

Comment lire un fichier texte directement à partir d'Internet en utilisant Java?

J'essaie de lire quelques mots d'un fichier texte en ligne.

J'ai essayé de faire quelque chose comme ça

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

mais ça n'a pas marché, j'obtiens 

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

comme sortie et je veux juste obtenir tous les mots.

Je sais qu'ils m'ont appris cela dans la journée, mais je ne me souviens pas exactement comment le faire maintenant, toute aide est grandement appréciée.

36
randomizertech

Utilisez une URL au lieu de File pour tout accès qui ne se trouve pas sur votre ordinateur local.

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

En fait, l'URL est encore plus généralement utile, y compris pour l'accès local (utilisez une URL file:), les fichiers jar et pour tout ce que vous pouvez récupérer.

La manière ci-dessus interprète le fichier dans le codage par défaut de votre plate-forme. Si vous souhaitez utiliser le codage indiqué par le serveur, vous devez utiliser une connexion URLConnection et analyser son type de contenu, comme indiqué dans les réponses à à cette question .


À propos de votre erreur, assurez-vous que votre fichier est compilé sans erreur - vous devez gérer les exceptions. Cliquez sur les messages rouges donnés par votre IDE, il devrait vous montrer une solution pour y remédier. Ne démarrez pas un programme qui ne compile pas (même si le IDE le permet).

Voici quelques exemples de traitement des exceptions:

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.
}
55
Paŭlo Ebermann

essayez quelque chose comme ça 

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

Puis utilisez-le comme n'importe quel ancien flux d'entrée

11
hhafez

Ce qui a vraiment fonctionné pour moi: (source: documentation Oracle "URL de lecture")

 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();
}
 }
7
chris

Utilisation de 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);
    }
}
4
Jawad

Je l'ai fait de la manière suivante pour une image, vous devriez pouvoir le faire pour du texte en utilisant des étapes similaires.

// 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
Alok D

Pour un flux d'entrée old school, utilisez ce code:

  InputStream in = new URL("http://google.com/").openConnection().getInputStream();
2
Bohemian

Utilisez ce code pour lire une ressource Internet dans une 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();
}

Ceci est basé sur ici .

1
BullyWiiPlaza

Alternativement, vous pouvez utiliser Ressources de Guava object:

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);
0
Matthias Braun