Quiero ejecutar una clase Java con argumentos proporcionados como un archivo.
En shell, puedo hacer
java SomeClass < 1.txt¿Hay algún equivalente para esto en intellij y/o gradle?
Probé IntelliJ IDEA -> editar configuraciones. Pero, el argumento no se está pasando.
ACTUALIZAR :
Esta función ahora está disponible para algunas configuraciones de ejecución/depuración. Por el momento, los tipos admitidos para las configuraciones de ejecución basadas en Java son: Aplicación, Java Scratch, JUnit, JarApplication.
Use la opción Redirigir entrada desde :
Respuesta original de 2017 con la solución alternativa:
IntelliJ IDEA no lo admite en este momento:
Puede ajustar el código para que acepte el nombre del archivo como parámetro y lo abra para su lectura. O puede crear una clase contenedora que redefinirá System.in y luego iniciar su clase Main original:
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); } } Asegúrese de especificar la ruta completa al archivo o de cambiar el directorio de trabajo en la configuración de ejecución/depuración de IntelliJ IDEA a la ubicación de 1.txt .
Ahora puede ejecutar la clase MainWrapper en lugar de la clase Main y funcionará igual que ejecutar
java Main < 1.txt Si necesita probar con diferentes nombres de archivo, reemplace new File("1.txt") con args[0] y pase el nombre de archivo en el campo de argumentos del programa de configuración de ejecución/depuración de MainWrapper .
De hecho, puede hacerlo ahora, a partir de la versión 2018.3 :
- Seleccione "Ejecutar/Depurar configuraciones"
- Establezca la ruta al archivo de entrada en el campo "Redirigir entrada desde"
La sintaxis < 1.txt significa que el procesador de comandos garantiza que la entrada estándar ( System.in en Java) proporcione el contenido del archivo 1.txt. El lanzador típico de Java no es compatible con esto.
Puede emular esto reconfigurando manualmente System.in para leer el archivo usando su propio fragmento de código de Java para hacer esto.