Java - ¿Como modificar archivos txt en java?

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

¿Como modificar archivos txt en java?

Publicado por Francisco Emmanuel (52 intervenciones) el 12/03/2020 22:07:51
Tengo un problema, tengo un archivo txt en java donde tengo la siguiente información:

Pais,Ciudad,Fecha,Casos
Mexico,Guadalajara,10/12/2020,5
España,Madrid,12/03/ 2020,6
Londres,Manchester,/14/02/2020,10
Italia,Roma,9/01/2020,

lo que quiero hacer es sumar los números que se encuentran en la columna de casos lo estoy haciendo mediante de un BufferedReader donde recorre la columna de casos y va sumando los números el problema es que donde no encuentra un numero si no un espacio vació me arroja un error ejemplo lee el 5 después le el siguiente renglón y encuentra un 6 lo suma después suma 10 después se va al siguiente renglón y no hay numero entonces ocurre el error lo que se me ocurre hacer es en los renglones donde no hay numero poner un 0 pero no se como hacerlo?

Dejo el código donde los sumo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public String [] cargarDatos() {/* Crear el registro y regresarlo*/
        String [] temp = {};
 
        try {
            if(fr != null){
                temp = br.readLine().split(",");
                total_c += Integer.parseInt(temp[3]);
            }
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
        }
        return temp;
    }
}
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 Billy Joel
Val: 2.055
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Billy Joel (561 intervenciones) el 12/03/2020 22:42:03
1
total_c += Integer.parseInt(temp[3].isEmpty() ? "0" : temp[3]);
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
sin imagen de perfil
Val: 103
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Francisco Emmanuel (52 intervenciones) el 12/03/2020 22:59:15
Quet tal gracias por la respuesta pero me sigue dando error aunque me podrías explicar como funciona la linea que me diste ?
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
Imágen de perfil de Billy Joel
Val: 2.055
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Billy Joel (561 intervenciones) el 12/03/2020 23:09:43
Que error sale?
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
sin imagen de perfil
Val: 103
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Francisco Emmanuel (52 intervenciones) el 12/03/2020 23:17:12
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 3
at Clases.Scan.cargarDatos(Scan.java:78)
at Clases.Screen$Esc_lista.valueChanged(Screen.java:92)
at javax.swing.JList.fireSelectionValueChanged(JList.java:1802)
at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1816)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:154)
at javax.swing.DefaultListSelectionModel.setValueIsAdjusting(DefaultListSelectionModel.java:685)
at javax.swing.JList.setValueIsAdjusting(JList.java:2146)
at javax.swing.plaf.basic.BasicListUI$Handler.mouseReleased(BasicListUI.java:2796)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
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

¿Como modificar archivos txt en java?

Publicado por Costero (112 intervenciones) el 13/03/2020 04:12:17
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
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
 
public class ReadCsv {
 
    public static void main(String [] args) throws IOException {
        int total = sum("src/main/test.csv");
        System.out.println("Result is: " + total);
    }
 
    private static int sum(String pathToCsv) throws IOException {
        BufferedReader csvReader = new BufferedReader(new FileReader(pathToCsv));
        String row;
        int total  = 0;
        boolean firstRow = true;
        while ((row = csvReader.readLine()) != null) {
            if(firstRow) {
                firstRow = false;
                continue;
            }
            String[] data = row.split(",");
            if(data.length == 4) {
                total += Integer.parseInt(data[3]);
            }
        }
        csvReader.close();
        return total;
    }
}
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
Imágen de perfil de Billy Joel
Val: 2.055
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Billy Joel (561 intervenciones) el 13/03/2020 14:21:50
Antes que nada disculpas por la demora en contestar.
Lo que estoy utilizando es el operador ternario.
El operador ternario me permite evaluar una condición y dependiendo de si se cumple la condición entonces se asigna la parte cierta, de otro modo la parte false. Es como un if-else pero en una línea.
En otras palabras sería algo así:
variable = [condición] ? [parte cierta] : [parte falsa];

Mejor lo pongo con tu ejemplo y aquí mi segunda disculpas por darte una solución sin antes probarla (hoy si la probé)
1
total_c += Integer.parseInt(temp[3].length == 4 ? temp[3] : "0");

Es lo mismo que:
1
2
3
4
5
6
7
String casos;
if(temp.length == 4){
    casos = temp[3];
} else {
    casos = "0";
}
total_c += Integer.parseInt(casos);

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Franklin
Val: 515
Bronce
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Franklin (140 intervenciones) el 13/03/2020 15:04:00
" operador ternario." Perfecto muchas gracias.
Si había entendido el como funcionaba porque lo había visto varias veces en tus respuestas pero no conocía el nombre.

es muy útil. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 103
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Francisco Emmanuel (52 intervenciones) el 13/03/2020 20:36:44
Muchas Billy Joel me sirvió en parte solo que algunas veces la suma la realiza mal no se a que se deba esto te dejo una imagen del error

Erroro

aquí en confirmed me da un total de 355 cuando no es asi
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

¿Como modificar archivos txt en java?

Publicado por Billy Joel (561 intervenciones) el 13/03/2020 21:20:48
Se me ocurre que no estás iniciando el contador. ¿Podrías poner los datos del archivo completo para ver qué es lo que está pasando?
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
sin imagen de perfil
Val: 103
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Francisco Emmanuel (52 intervenciones) el 13/03/2020 21:38:42
Si mira te los dejo aunque son varios archivos pero te dejo los datos de uno de los archivos:

Province/State,Country/Region,Last Update,Confirmed,Deaths,Recovered
Anhui,Mainland China,1/23/20 17:00,9,,
SPRINFIELD,Mainland China,1/23/20 17:00,22,,
Chongqing,Mainland China,1/23/20 17:00,9,,
Fujian,Mainland China,1/23/20 17:00,5,,
Gansu,Mainland China,1/23/20 17:00,2,,
Guangdong,Mainland China,1/23/20 17:00,32,,2
Guangxi,Mainland China,1/23/20 17:00,5,,
Guizhou,Mainland China,1/23/20 17:00,3,,
Hainan,Mainland China,1/23/20 17:00,5,,
Hebei,Mainland China,1/23/20 17:00,1,1,
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
Imágen de perfil de Billy Joel
Val: 2.055
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Billy Joel (561 intervenciones) el 16/03/2020 00:55:02
Estuve probando con los datos que has puesto y he logrado resolver el problema. A continuación un mini promagra que hace los calculos con los datos dados:
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
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
 
/**
 *
 * @author Billy Joel
 */
public class ArchivoCadena {
    public static void main(String[] args) {
        File archivo;
        FileReader fr = null;
        BufferedReader br;
        int total_c = 0;
        try {
            archivo = new File("C:\\casos_fran.txt");
            fr = new FileReader(archivo);
            br = new BufferedReader(fr);
 
            // Lectura del fichero
            String linea;
            while ((linea = br.readLine()) != null) {
                //System.out.println(linea);
                linea = linea.replace(",,", ", ,") + (linea.substring(linea.length() - 1).equals(",") ? " " : "");
 
                String[] r = linea.split(",");
                for (int i = 0; i < r.length; i++) {
                    System.out.print(i + ": " + r[i] + "\t");
                }
                System.out.println();
                total_c += Integer.parseInt(r[3]);
            }
        } catch (IOException e) {
            e.printStackTrace(System.out);
        } finally {
            // En el finally cerramos el fichero, para asegurarnos
            // que se cierra tanto si todo va bien como si salta
            // una excepcion.
            try {
                if (null != fr) {
                    fr.close();
                }
            } catch (IOException e2) {
                e2.printStackTrace(System.out);
            }
        }
 
        System.out.println("total: " + total_c);
    }
}

Pruebalo y me cuentas!!
Saludos,
Billy Joel
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
sin imagen de perfil
Val: 103
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Francisco Emmanuel (52 intervenciones) el 13/03/2020 21:49:36
Descubrí que la suma sale mal cuando cuando en la columna deaths hay un numero si en la columna de deaths y recovered quito todos los números dejo campos vacíos realiza bien la suma pero si dejo aunque sea un numero en la columna deaths y recovered realiza mal la suma. no se a que se deba esto. Si tiene un numero de lado derecho de la columna confirmed el numero que esta en la columna de confirmed no lo contempla
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

¿Como modificar archivos txt en java?

Publicado por Costero (112 intervenciones) el 13/03/2020 22:27:33
Cambia == a >=
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
sin imagen de perfil
Val: 103
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Francisco Emmanuel (52 intervenciones) el 13/03/2020 22:38:36
Buena idea funciono una pregunta me podrías explicar para que sirve esta linea if(temp.length >= 4) no la entiendo muy bien
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

¿Como modificar archivos txt en java?

Publicado por Costero (112 intervenciones) el 13/03/2020 23:26:12
Cuando llama a metodo split(...) este te retorna un array con cierta cantidad the elementos. Por ejemplo:

"Hola,Mundo" te retornaria un array con dos elementos.

"Hola,Mundo,Cuidense,del,Corona Virus" este te retornaria un array con 5 elementos.

etc., etc.

Con esto temp.length >= 4 estas chequeado si el array tiene 4 o mas elementos.

En tu file tienes lineas de diferentes sizes asi que solo te enteriza las que tienen mas o igual a 4 para obtener el elemento en la position 3 (los arrays empiezan en el 0)
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
sin imagen de perfil
Val: 103
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Francisco Emmanuel (52 intervenciones) el 13/03/2020 23:50:23
A ok gracias
entonces si quisiera sacar el total de la columna deaths tendria que ser if(temp.leng>=5){ casos = temp[4]; }
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

¿Como modificar archivos txt en java?

Publicado por Costero (112 intervenciones) el 14/03/2020 00:02:10
Asi es exacto
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
sin imagen de perfil
Val: 103
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Francisco Emmanuel (52 intervenciones) el 14/03/2020 00:24:06
Ultima pregunta lo estoy haciendo como te lo mencione en el comentario pasado pero me arrojar el error: Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "". Entoces cambie el >=5 por ==5 pero no realiza la suma bien a que se debe esto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public String[] cargarDatos() {/* Crear el registro y regresarlo*/
    String[] temp = {};
    try {
        if (fr != null) {
            temp = br.readLine().split(",");
            String casos;
            if (temp.length >= 4) {
                casos = temp[3];
            } else {
                casos = "0";
            }
            total_c += Integer.parseInt(casos);
            if(temp.length==5){
                casos = temp[4];
            }else{
                casos = "0";
            }
            total_d +=Integer.parseInt(casos);
 
        }
    } catch (IOException ex) {
        System.err.println(ex.getMessage());
    }
    return temp;
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
Imágen de perfil de Franklin
Val: 515
Bronce
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Franklin (140 intervenciones) el 14/03/2020 00:41:03
Pasa porque el valor esta vacio que estas parseando.

como es un String para evitar que este vacio puedes usar if(VariableString().lenght() >0 ) para indicar que tiene al menos 1 valor o para saber si no es nulo if(!(null).equals(fr))

Creo que con eso saldría.
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
sin imagen de perfil
Val: 103
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Francisco Emmanuel (52 intervenciones) el 14/03/2020 00:58:42
No funciona de hecho no creo que sea eso ya que cuando hago la sumatoria de la columna de confirmed no es necesario hacer eso y en teoría se debe hacer algo similar para la sumatoria de la siguiente columna
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

¿Como modificar archivos txt en java?

Publicado por Costero (112 intervenciones) el 14/03/2020 01:22:24
Si el problem es como dijeron anteriorment el string esta vacio. Pon para atras >=5

El codigo quedaria asi:

1
2
3
4
5
6
7
8
9
if(temp.length>=5){
casos = temp[4];
}else{
casos = "0";
}
 
if(!Strings.isNullOrEmpty(casos)) {
            total_d +=Integer.parseInt(casos);
        }
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
sin imagen de perfil
Val: 103
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Francisco Emmanuel (52 intervenciones) el 14/03/2020 01:33:14
Strings seria una nueva variable? lo cual que contendria?
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

¿Como modificar archivos txt en java?

Publicado por Costero (112 intervenciones) el 14/03/2020 01:51:20
No a Strings es una clase con una cantidad de metodos utilitarios
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
sin imagen de perfil
Val: 103
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Francisco Emmanuel (52 intervenciones) el 24/03/2020 23:52:34
Que tal me dices que Strings es una clase pero al momento de que lo pongo en mi código me marca error dice que Strings no se encuentra y no se puede importar
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
Imágen de perfil de Kabuto
Val: 2.268
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Kabuto (568 intervenciones) el 25/03/2020 19:21:55
Strings no es una clase propia de Java, es una librería externa.
No se donde obtenerla. Se puede hacer lo mismo con la clase String normal, pero requiere un poco más de código.
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

¿Como modificar archivos txt en java?

Publicado por Costero (112 intervenciones) el 25/03/2020 19:43:34
Si. No me habia dado cuenta . Viene de la libreria De google Guava
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
Imágen de perfil de Franklin
Val: 515
Bronce
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

¿Como modificar archivos txt en java?

Publicado por Franklin (140 intervenciones) el 13/03/2020 13:19:16
Billy tambien estoy interesado en saber sobre tu linea de código, me doy una buena idea de como funciona pero en sí, como se llama o identifica

? "0" : temp[3]);
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