Salut tout le monde,

Je voudrais rediriger mon flux d'entrées (Reader) de Console vers un fichier, pour tester une interface texte de manière automatique.

Avec un BufferedReader par exemple, ça me donne ça, et ça marche bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
try {
            final File inputFile = new File(Thread.currentThread().getContextClassLoader().getResource("input.txt").toURI());
            final BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(inputFile));
            System.setIn(inputStream);
        } catch (final FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (final URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
        final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s;
        try {
            while ((s = br.readLine()) != null) {
                System.out.println(s);
            }
        } catch (final IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
Par contre dans le code à tester les readLine sont appelés depuis Console, et dans ce cas l'indirection du flux d'entrée standard semble ne pas marcher.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 try {
            final File inputFile = new File(Thread.currentThread().getContextClassLoader().getResource("input.txt").toURI());
            final BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(inputFile));
            System.setIn(inputStream);
        } catch (final FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (final URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
        final Console console = System.console();
        if (console != null) {
            final String input = console.readLine();
            System.out.printf("Lecture : %s", input);
        }
 
        System.out.println("Fini");
Avec ce code, je reste bloqué sur le readLine... qui attend bêtement une saisie clavier !

Evidemment, tout ceci dans une console système qui accepte la Console Java (bref pas la console Eclipse !)

Est-ce que quelqu'un par hasard saurait faire ce type de redirection ?

Cordialement,

Pouce.