Java - EJECUTAR UN PROGRAMA EN OTRO PC

 
Vista:
sin imagen de perfil
Val: 6
Ha aumentado su posición en 720 puestos en Java (en relación al último mes)
Gráfica de Java

EJECUTAR UN PROGRAMA EN OTRO PC

Publicado por HELENA (2 intervenciones) el 08/06/2021 20:53:51
Buenas tardes, necesito ayuda con un problema que se me presenta en un programa creado en JAVA.
El programa se ejecuta correctamente en mi PC, crea un archivo en una carpeta y posteriormente lo lee desde esa carpeta con la dirección del directorio de mi ordenador.
Ahora necesito ejecutarlo en otro ordenador pero desconozco la dirección donde se va a crear el archivo por lo que al ejecutar mi mismo programa me da error, indicando que la dirección del archivo no es correcta o no se encuentra.
Adjunto el código, a ver si me podéis echar una mano para modificarlo y poder ejecutarlo en cualquier PC.
Es un programa con nivel muy principiante, como podréis ver.

La Fila que me da el problema es la Fila 117:
1
FileReader fr=new FileReader("C:\\Users\\helen\\OneDrive\\Documentos\\NetBeansProjects\\Productos\\Productos.xls");

El código completo es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import java.io.FileReader;
 
 
public class Main {
    static int num;
    static Scanner sc=new Scanner(System.in);
    static Producto[] listProd=new Producto[100];
    static int nProd;
 
 
    public static void main(String[] args) throws IOException{
        funcionSwitch();
 
    }
 
    public static void funcionMenu(){
        do{
            System.out.println("Teclee la opción que desee."+"\n1-Introducir nuevo producto. \n2-Visualizar productos."
                    +"\n3-Guardar en archivo de text.\n4-Leer archivo de texto con productos guardados.\n5-Salir.");
            num=sc.nextInt();
        }while(num<0||num>5);
    }
    public static void funcionSwitch()throws IOException{
        funcionMenu();
        do{
            switch(num){
                case 1:
                    introducirProds();
                    funcionMenu();
                    break;
 
                case 2:
                    visualizarProds();
                    funcionMenu();
                    break;
                case 3:
                    guardaProds();
                    funcionMenu();
                    break;
                case 4:
                    leeProds();
                    funcionMenu();
                    break;
 
            }
        }while(num !=5);
    }
    public static void introducirProds(){
        int cierraWhile=0;
        while(nProd<listProd.length && cierraWhile !=1){
         Producto P=new Producto();
 
            System.out.println("Introduzca los datos del nuevo producto.");
            System.out.println("Código:");
            P.setCodigo(sc.nextInt());
            System.out.println("Nombre:");
            P.setDescripcion(sc.next());
            System.out.println("Peso");
            P.setPeso(sc.nextFloat());
 
            System.out.println("¿Quiere dejar de introducir productos? teclee: 1=no, 0=si.");
            cierraWhile=sc.nextInt();
 
            listProd[nProd]=P;
            nProd++;
 
            if(nProd==listProd.length){
                System.out.println("Almacenamiento lleno.");}
        }
    } //Case 1
 
    public static void visualizarProds(){
        System.out.println("Productos introducidos:");
            for(int i=0;i<nProd;i++)
                System.out.println("Producto"+ listProd[i].getDescripcion()+"; con código: "
                + listProd[i].getCodigo()+"; y peso: "+ listProd[i].getPeso()+".");
    } //Case 2
 
    public static void guardaProds() throws IOException{
        System.out.println("Productos guardados en: Productos.xls");
 
        try{
 
 
        File nombreFichero=new File("Productos.xls");
        FileWriter fw=new FileWriter(nombreFichero,true);
        BufferedWriter bw=new BufferedWriter(fw);
        PrintWriter pw = new PrintWriter(bw);
                for(int i=0;i<nProd;i++){
 
                    pw.println(listProd[i].getCodigo());
                    pw.println(listProd[i].getDescripcion());
                    pw.println(listProd[i].getPeso());
 
        }pw.close();
        }catch(IOException e){
            System.out.println("No se ha podido guardar. Error:"+ e);}
            }//Case 3
 
    public static void leeProds()throws IOException{
 
        String pr;
        FileReader fr=new FileReader("C:\\Users\\helen\\OneDrive\\Documentos\\NetBeansProjects\\Productos\\Productos.xls");
        BufferedReader br=new BufferedReader(fr);
        while((pr=br.readLine())!=null){
            System.out.println(pr);
        }
 
     }// Case 4
 
}

Muchas gracias a todos por vuestra ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

EJECUTAR UN PROGRAMA EN OTRO PC

Publicado por Kabuto (1381 intervenciones) el 09/06/2021 01:12:24
Hola.
Tu estás usando una ruta "absoluta" para indicar de donde leer el archivo xls.
Esto es arriesgado, sobre todo, si eliges una ruta asociada a tu cuenta de usuario del sistema operativo. Pues entonces, tu programa solo funcionará con aquellas personas que se llamen "helen" y usen su nombre como cuenta de usuario.

Lo mejor es usar una ruta "relativa". De hecho, para guardar el archivo, estás usando una ruta relativa en la línea que marco en negrita.
1
2
3
4
5
6
7
8
public static void guardaProds() throws IOException{
    System.out.println("Productos guardados en: Productos.xls");
 
    try{
 
 
    File nombreFichero=new File("Productos.xls"); //Esta es una ruta relativa
    FileWriter fw=new FileWriter(nombreFichero,true);

Cuando guardas, ya no importa cómo se llame el usuario. El archivo .xls se va a crear en la misma carpeta donde se esté ejecutando el programa.
Por eso se llama ruta "relativa", porque va "en relación" a donde se está ejecutando el programa.
No importa en que carpeta, ni en que disco duro, ni si se ejecuta desde un pendrive...

Entonces, para leer, puedes hacer lo mismo.
1
2
3
4
public static void leeProds()throws IOException{
 
    String pr;
    FileReader fr=new FileReader("Productos.xls");

De esta manera, debería leer y escribir en el mismo sitio, y en cualquier ordenador.


En el caso de quisieras usar una ruta absoluta, tendrías que escoger una que sepas que va a funcionar en cualquier ordenador.

Por ejemplo, TODO el mundo tiene un disco con la letra C:.
Así que tanto para guardar, como para leer, puedes hacer una ruta como:

1
FileReader fr=new FileReader("C:\\Productos\\Productos.xls");

Así el programa creará una carpeta llamada "Productos" en la raíz del disco C: (que todo el mundo tiene) y ahí meterá el .xls

Si la raíz del disco C: no te parece apropiada, porque un alto porcentaje de usuarios hoy día no sabe acceder a la raíz de su disco duro, porque de hecho no saben siquiera lo que es un disco duro, pero misteriosamente sí saben hacer el borrico en Tik Tok....

Pues entonces hay otra forma de conseguir que el archivo se cree en la carpeta "Mis Documentos" del usuario, se llame como se llame.
Y esto se consigue de la siguiente forma:
1
FileReader fr=new FileReader(System.getProperty("user.home")+"\\documents\\Productos\\productos.xls");

Ahí lo que hacemos es preguntarle al sistema operativo cual es la carpeta personal del usuario que está ejecutando la aplicación, para así poder localizar su carpeta "Mis Documentos" y ubicar ahí la carpeta con el archivo .xls

De este modo, da igual si el usuario se llama "helen", "Kabuto"... o lo que sea. Conseguiremos que el archivo se guarde en su correspondiente carpeta personal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 720 puestos en Java (en relación al último mes)
Gráfica de Java

EJECUTAR UN PROGRAMA EN OTRO PC

Publicado por HELENA (2 intervenciones) el 09/06/2021 10:07:15
Muchas gracias, me has sido de gran ayuda. Una explicación sencilla pero genial. El programa funciona correctamente con ese sencillo cambio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar