Lecture à partir de System.in -Java [dupliquer]
Cette question a déjà une réponse ici:
Je ne sais pas comment vous êtes censé lire à partir de l'entrée 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 et donné à myProg dans la méthode principale.
Des suggestions?
8 answers
Vous pouvez utiliser System.in
pour lire à partir de l'entrée standard. Cela fonctionne comme la saisie à partir d'un clavier. Le système d'exploitation gère le passage du fichier à l'entrée standard.
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());
}
}
Eh bien, vous pouvez lire System.in
lui-même car c'est un InputStream
valide. Ou aussi, vous pouvez l'envelopper dans un BufferedReader
:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Utilisation System.in, c'est un InputStream qui sert juste à cet effet
Vous lirez à partir de System.in
comme vous le feriez pour la saisie au clavier en utilisant, par exemple, InputStreamReaderou Scanner.
En Java, l'entrée de la console est réalisée en lisant depuis System.in. Pour obtenir un caractère basé flux, qui est attaché à la console, wrap Système.dans dans un BufferedReader objet. BufferedReader prend en charge un tampon du flux d'entrée. Son constructeur le plus couramment utilisé est montré ici:
BufferedReader(Reader inputReader)
Ici, inputReader est le flux qui est lié à l'instance de BufferedReader c'est être créé. Lecteur est une classe abstraite. L'une de ses sous-classes concrètes est InputStreamReader , qui convertit les octets en caractères.
Pour obtenir un InputStreamReader objet lié à System.in, utilisez le constructeur suivant:
InputStreamReader(InputStream inputStream)
Parce que System.in fait référence à un objet de type Flux d'entrée, il peut être utilisé pour inputStream. Mettre tout cela ensemble, la ligne suivante de code crée un 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 basé sur des caractères qui est lié à la console par System.in.
Ceci est tiré du livre Java- The Complete Reference by Herbert Schildt
Vous pouvez appeler java myProg arg1 arg2 ...
:
public static void main (String args[]) {
BufferedReader in = new BufferedReader(new FileReader(args[0]));
}
Vous cherchez probablement quelque chose comme ça.
FileInputStream in = new FileInputStream("inputFile.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(in));
class myFileReaderThatStarts with arguments
{
class MissingArgumentException extends Exception{
MissingArgumentException(String s)
{
super(s);
}
}
public static void main(String[] args) throws MissingArgumentException
{
//You can test args array for value
if(args.length>0)
{
// do something with args[0]
}
else
{
// default in a path
// or
throw new MissingArgumentException("You need to start this program with a path");
}
}