44 votes

Lecture à partir de System.in - Java

Je ne sais pas comment vous êtes censé lire l'entrée du système à partir d'un fichier Java.

Je veux pouvoir appeler java myProg < file

Où le fichier est ce que je veux lire en tant que chaîne de caractères et donner à myProg dans la méthode principale.

Des suggestions ?

0 votes

Quel est le problème exactement ? 1) vous ne savez pas comment démarrer un programme java avec un argument 2) vous ne savez pas comment ouvrir un fichier dans un programme java dont le nom de fichier est un argument de la méthode main. ou 3) les deux.

2 votes

@Fortega ni l'un ni l'autre. Il veut faire entrer un fichier à la place de l'entrée système.

1 votes

Peter, parfois, lire 68 millions de pages, c'est un peu TROP !

69voto

corsiKa Points 39442

Vous pouvez utiliser System.in pour lire depuis l'entrée standard. Le fonctionnement est identique à celui d'une saisie au clavier. Le système d'exploitation gère le passage du fichier à l'entrée standard.

import java.util.Scanner;
class MyProg {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Printing the file passed in:");
        while(sc.hasNextLine()) System.out.println(sc.nextLine());
    }
}

1 votes

N'oubliez pas d'importer java.util.Scanner

0 votes

Également, la documentation de Scanner : docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

19voto

xappymah Points 1209

Eh bien, vous pouvez lire System.in lui-même car il s'agit d'un InputStream . Ou vous pouvez aussi l'envelopper dans un BufferedReader :

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

3 votes

L'encapsulation dans un BufferedReader semble être une mauvaise idée car sous Linux (peut-être pas dans toutes les configurations) cela conduit à ce que votre programme ne reçoive pas les données après que vous ayez tapé quelque chose dans le terminal/PuTTy et appuyé sur "Enter". Pour que le programme obtienne ce que vous avez tapé, vous devez envoyer un caractère spécial pour vider le flux.

8voto

En Java, la saisie de la console s'effectue en lisant le fichier System.in . Pour obtenir un flux basé sur les caractères qui est attaché à la console, enveloppez System.in dans un BufferedReader objet. BufferedReader supporte un flux d'entrée en mémoire tampon. Son constructeur le plus couramment utilisé est présenté ici :

BufferedReader(Reader inputReader)

Ici, inputReader est le flux qui est lié à l'instance de BufferedReader qui est en train de créé. Lecteur est une classe abstraite. Une de ses sous-classes concrètes est InputStreamReader , qui convertit les octets en caractères.

Pour obtenir un InputStreamReader qui est lié à System.in, utilisez le constructeur suivant :

InputStreamReader(InputStream inputStream)

Parce que System.in fait référence à un objet de type InputStream il peut être utilisé pour inputStream. En mettant tout cela ensemble, la ligne de code suivante crée un fichier de type BufferedReader qui est connecté au clavier :

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

Après l'exécution de cette instruction, br est un flux de caractères qui est lié à la console par l'intermédiaire de System.in.

Cet extrait est tiré du livre Java- The Complete Reference by Herbert Schildt

5voto

Riccardo Cossu Points 1465

Utilisez System.in, il s'agit d'un InputStream qui sert juste à cet effet.

4voto

Isaac Truett Points 5858

Vous lisez System.in comme vous le feriez pour une saisie au clavier en utilisant, par exemple, InputStreamReader o Scanner .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X