Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IntelliJ IDEA: Run java with args from external file

I want to run a java class with args supplied as a file.

On shell, i can do

    java SomeClass < 1.txt

Is there any equivalent for this on intellij and/or gradle.

I tried on IntelliJ IDEA -> edit configurations. But, the argument is not getting passed.

like image 264
l a s Avatar asked Mar 17 '17 22:03

l a s


People also ask

How do I add external files to IntelliJ?

In the Project tool window ( Alt+1 ), right-click the node in which you want to create a new file and click New | File. Alternatively, select the node, press Alt+Insert , and click File. Name the new file and specify its extension, for example: File. js, and press Enter .

How do I run an existing Java Program in IntelliJ?

You can run a process with ⌃R (macOS), or Shift+F10 (Windows/Linux). To stop a process, you can use ⌘F2 on macOS, or Ctrl+F2 on Windows/Linux.


2 Answers

UPDATE:

This feature is now available for some Run/Debug configurations. At the moment supported types for Java-based run configurations are: Application, Java Scratch, JUnit, JarApplication.

Use the Redirect input from option:

Redirect input from


Original answer from 2017 with the workaround:

IntelliJ IDEA doesn't support it at the moment:

  • IDEA-88717 No way to configure STDIN reading from a file at Run/Debug configurations

You can adjust the code so that it accepts the file name as a parameter and opens it for reading. Or you can create a wrapper class that will redefine System.in, then start your original Main class:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class MainWrapper {
  public static void main(String[] args) throws IOException {
    FileInputStream is = new FileInputStream(new File("1.txt"));
    System.setIn(is);
    Main.main(args);
  }
}

Make sure to either specify the full path to the file or to change the working directory in IntelliJ IDEA Run/Debug configuration to the location of 1.txt.

Now you can run MainWrapper class instead of the Main class and it will work the same as running

java Main < 1.txt

If you need to test with different file names, replace new File("1.txt") with args[0] and pass the file name in the MainWrapper Run/Debug configuration Program arguments field.

like image 147
CrazyCoder Avatar answered Sep 29 '22 20:09

CrazyCoder


You can actually do that now, starting from version 2018.3:
- Select "Run/Debug configurations"
- Set path to input file at "Redirect input from" field

enter image description here

like image 43
coffman21 Avatar answered Sep 29 '22 20:09

coffman21