Ejecutando Java desde la terminal: no se pueden encontrar archivos de texto

2022-10-06 23:23:30

Utilizo Java en Eclipse para la manipulación de archivos, como edición, búsqueda, etc. Por ejemplo, tengo dos archivos de texto. Uno es "sales.txt" y el otro es "employees.txt". Se supone que el usuario debe ingresar una fecha de inicio y una fecha de finalización como argumentos. Luego, el programa encuentra las fechas que coinciden y todo lo demás. A partir de ahí calcula la comisión para los empleados en los que encontró las fechas de venta.

Este es el problema: Estoy usando Kali Linux (Debian) y tengo que crear un script de shell que compile y ejecute el programa Java con argumentos de línea de comandos.

Por ejemplo: el script de shell se llama "Runner". Así que escribo: ./Runner [fecha de inicio] [fecha de finalización]

Al hacerlo, se compila correctamente sin advertencias. Pero cuando se ejecuta el programa, la terminal muestra esto: no se pueden encontrar empleados o ventas .txt Pero cuando uso Ejecutar configuraciones en Eclipse y edito el panel Argumentos para [fecha de inicio] [fecha de finalización], el programa funciona bien.

Así es como se ve el panel Proyectos en eclipse:

Editar - Aquí está el script de shell de prueba:

#! /bin/bash

javac /$HOME/workspace/Java\ Projects/Database_2/src/src/*.java
cd /$HOME/workspace/Java\ Projects/Database_2/src
java src.Runner  

Editar 2 - Salida de terminal > ./testRunner 01/01/2015 07/01/2015

java.io.FileNotFoundException: employees.txt (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.util.Scanner.<init>(Scanner.java:611)
    at src.CommissionModifier.parseEmployees(CommissionModifier.java:101)
    at src.CommissionModifier.process(CommissionModifier.java:15)
    at src.Runner.handleArguments(Runner.java:10)
    at src.Runner.main(Runner.java:6)
java.io.FileNotFoundException: sales.txt (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.util.Scanner.<init>(Scanner.java:611)
    at src.CommissionModifier.parseSales(CommissionModifier.java:135)
    at src.CommissionModifier.process(CommissionModifier.java:16)
    at src.Runner.handleArguments(Runner.java:10)
    at src.Runner.main(Runner.java:6)

- Drew 1902

Source
zh
Responder


1
  • En eclipse, la carpeta de trabajo es la carpeta del proyecto. Mirando su secuencia de comandos, probablemente sea /$HOME/workspace/Java\ Projects/Database_2. Apuesto a que sus archivos también están en esa carpeta, por eso funciona en Eclipse.

    Cuando ejecuta desde el script, está cambiando la carpeta a /$HOME/workspace/Java\ Projects/Database_2/src que probablemente no tenga sus archivos.

    Si esas suposiciones son ciertas, su secuencia de comandos debe ingresar a /$HOME/workspace/Java\ Projects/Database_2 en su lugar. Es probable que Java no pueda encontrar sus clases desde allí, por lo que también deberá agregar el classpath a los argumentos de la línea de comandos.

    #! /bin/bash
    
    javac /$HOME/workspace/Java\ Projects/Database_2/src/src/*.java
    cd /$HOME/workspace/Java\ Projects/Database_2
    java -cp src src.Runner