2015-04-16 3 views
0

J'écris un programme Java pour nettoyer certaines données.Les arguments de ligne de commande sont-ils perdus?

Je passe les fichiers dont j'ai besoin, mais le premier fichier est ignoré!

Code minimum de reproduire le problème:

public class Classifier { 
    public static void main(String[] args) throws IOException { 
    System.out.println(args[0]); 
    for (String s : args) { 
     System.out.println(s); 
    } 
    } 
} 

Je courais avec l'argument de ligne de commande suivante:

java Classifier < March.csv February.csv 

Et la sortie que je reçois est:

February.csv February.csv 

Quelqu'un peut-il expliquer pourquoi c'est?

Répondre

2

Le shell < March.csv est interprété par le shell comme une redirection d'entrée. Le contenu de March.csv est envoyé à l'entrée standard de votre programme, que vous ignorez. Cela arrive dans le shell, avant même que votre programme Java ne soit démarré. Par conséquent, seul February.csv est envoyé en tant qu'argument de ligne de commande à main.

Supprimez ce <, de sorte que tous les arguments de ligne de commande que vous avez l'intention d'envoyer à main sont envoyés.

1

opérateur < redirige ce fichier stdin à ce processus Java

si

si vous avez juste

java Classifier < March.csv 

et essayez de lire des arguments, vous verriez rien et si vous lisez stdin vous liriez le contenu du fichier