elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Ayuda leyendo archivo de 5 GB [OutOfMemoryError]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda leyendo archivo de 5 GB [OutOfMemoryError]  (Leído 2,589 veces)
LaThortilla (Effort)

Desconectado Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
Ayuda leyendo archivo de 5 GB [OutOfMemoryError]
« en: 17 Noviembre 2016, 02:01 am »

Buenos dias estoy teniendo problemas para generar un script que me permita almacenar una base de datos que esta en un txt separando cada registro por lineas y cada columna por comas..



estoy intentando guardar estos registros en una base de datos mysql pero dado que es tan grande el archivo me esta generando un error:


Código
  1. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
  2. at java.util.Arrays.copyOfRange(Arrays.java:2694)
  3. at java.lang.String.<init>(String.java:203)
  4. at java.nio.HeapCharBuffer.toString(HeapCharBuffer.java:561)
  5. at java.nio.CharBuffer.toString(CharBuffer.java:1201)
  6. at java.util.regex.Matcher.toMatchResult(Matcher.java:249)
  7. at java.util.Scanner.match(Scanner.java:1339)
  8. at java.util.Scanner.hasNextLine(Scanner.java:1547)
  9. at testproject.TestProject.main(TestProject.java:90)
  10. Java Result: 1
  11.  


les pongo el codigo completo por si alguien se le ocurre como solucionarlo....

Código
  1. package testproject;
  2.  
  3.  
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.io.PrintWriter;
  9. import java.sql.Connection;
  10. import java.sql.DriverManager;
  11. import java.sql.PreparedStatement;
  12. import java.sql.SQLException;
  13. import java.util.Scanner;
  14. import java.util.logging.Level;
  15. import java.util.logging.Logger;
  16.  
  17.  
  18. /**
  19.  *
  20.  * @author Usuario
  21.  */
  22. public class TestProject {
  23.    /**
  24.      * @param args the command line arguments
  25.      */
  26.  
  27.    public static Connection con;
  28.     public static void conectar() {
  29.        try {
  30.  
  31.            if (con == null || con.isClosed()) {
  32.                String connection = "jdbc:mysql://" + "localhost" + ":" + "3306" + "/" + "base";
  33.                String user = "aaa";
  34.                String password = "***";
  35.                con = DriverManager.getConnection(connection, user, password);
  36.                System.out.println("");
  37.                //System.out.println("[*][SQL] Conexión Exitosa.");
  38.            }
  39.        } catch (SQLException ex) {
  40.            ex.printStackTrace();
  41.            System.out.println("[Error][SQL] No se pudo crear conexión con la base de datos.");
  42.        }
  43.  
  44.    }
  45.  
  46.     public static void printLog(String line){
  47.            FileWriter outputStream = null;
  48.        try {
  49.            outputStream = new FileWriter("errlog.txt",true);
  50.            PrintWriter pw = new PrintWriter(outputStream);
  51.            pw.println(line);
  52.            pw.close();
  53.  
  54.        } catch (IOException ex) {
  55.            Logger.getLogger(TestProject.class.getName()).log(Level.SEVERE, null, ex);
  56.        }
  57.  
  58.     }
  59.    public static void main(String[] args) throws FileNotFoundException, SQLException, IOException {
  60.        String driver = "com.mysql.jdbc.Driver";
  61.        try {
  62.            Class.forName(driver);
  63.        } catch (ClassNotFoundException ex) {
  64.        }
  65.        conectar();
  66.        FileInputStream inputStream = null;
  67.  
  68.        Scanner sc = null;
  69.        try {
  70.            inputStream = new FileInputStream("C:\\Users\\usuario\\Desktop\\base5GB.txt");
  71.  
  72.  
  73.  
  74.            sc = new Scanner(inputStream, "UTF-8");
  75.            while (sc.hasNextLine()) {
  76.                String line = sc.nextLine();
  77.                try{
  78.                    if(line.length() > 2){
  79.                        String [] campos = line.split(",");
  80.                        if(campos.length == 10){
  81.                            String QUERY = "INSERT INTO `tabla`(`campo1`, `campo2`,`campo3`, `campo4`, `campo5`, `campo6`, `campo7`, `campo8`, `campo9`, `campo10`) VALUES ("+campos[0]+",'"+campos[1]+"','"+campos[2]+"','"+campos[3]+"','"+campos[4]+"','"+campos[5]+"','"+campos[6]+"','"+campos[7]+"','"+campos[8]+"','"+campos[9]+"')";
  82.                            PreparedStatement prest = con.prepareStatement(QUERY);
  83.                            if(prest.executeUpdate()>0){
  84.                                System.out.println("ID Insertado  "+campos[0]);
  85.                             }else{
  86.                                 printLog(line);
  87.                            }
  88.                        }else{
  89.                             printLog(line);
  90.                        }
  91.                    }else{
  92.  
  93.                     //System.out.println("ID Insertado"+idBD);
  94.                    }
  95.                // System.out.println(line);
  96.                }catch(Exception ex){
  97.                    System.out.println("-"+line+"-");
  98.                    ex.printStackTrace();
  99.                    printLog(line);
  100.                }
  101.            }
  102.            // note that Scanner suppresses exceptions
  103.            if (sc.ioException() != null) {
  104.                throw sc.ioException();
  105.            }
  106.        } finally {
  107.            if (inputStream != null) {
  108.                inputStream.close();
  109.            }
  110.            if (sc != null) {
  111.                sc.close();
  112.            }
  113.        }
  114.    }
  115.  
  116. }
  117.  


« Última modificación: 17 Noviembre 2016, 03:33 am por Effort » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Ayuda leyendo archivo de 5 GB [OutOfMemoryError]
« Respuesta #1 en: 17 Noviembre 2016, 02:15 am »

no se java... pero no puedes ir leyendo por secciones e ir liberando la memoria de la sección leida?


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
LaThortilla (Effort)

Desconectado Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
Re: Ayuda leyendo archivo de 5 GB [OutOfMemoryError]
« Respuesta #2 en: 17 Noviembre 2016, 03:32 am »

Si eso es lo que estoy buscando y estoy probando con

Código
  1. System.cg();

no se si funcionara....
En línea

Konlex

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Ayuda leyendo archivo de 5 GB [OutOfMemoryError]
« Respuesta #3 en: 17 Noviembre 2016, 03:51 am »

Encontre una posible solucion: Click aqui

saludos!
En línea

La felicidad no es continua todos los dias de tu vida,sino que se presenta en momentos en que menos te los esperas.No pienses que eres infeliz,solo que no te das cuenta que ella se presenta en breves momentos de tu vida,y no la sabes valorar.
LaThortilla (Effort)

Desconectado Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
Re: Ayuda leyendo archivo de 5 GB [OutOfMemoryError]
« Respuesta #4 en: 17 Noviembre 2016, 04:15 am »

Encontre una posible solucion: Click aqui

saludos!

No es la solución pero me ayuda a monitorear  la memoria disponible...
En línea

Konlex

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Ayuda leyendo archivo de 5 GB [OutOfMemoryError]
« Respuesta #5 en: 17 Noviembre 2016, 04:32 am »

Citar
No es la solución pero me ayuda a monitorear  la memoria disponible...

Por eso mismo dije una "posible" solucion,otra "posible" solucion seria ir a panel de control/programas/java/configuracion,y alli establecer el espacio de memoria para archivos temporales.

saludos!
En línea

La felicidad no es continua todos los dias de tu vida,sino que se presenta en momentos en que menos te los esperas.No pienses que eres infeliz,solo que no te das cuenta que ella se presenta en breves momentos de tu vida,y no la sabes valorar.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
error en runtime leyendo datos de un archivo binario c++
Programación C/C++
winroot 2 2,929 Último mensaje 16 Mayo 2010, 01:29 am
por winroot
Ayuda con OllyDBG y Themida, leyendo memoria « 1 2 3 »
Ingeniería Inversa
ŞCØRPIØN-X3 26 14,584 Último mensaje 19 Septiembre 2011, 11:06 am
por Draover
Error Leyendo un archivo con varios objetos
Java
bash 0 1,653 Último mensaje 11 Febrero 2016, 16:42 pm
por bash
[javascript] Leyendo un archivo de texto.
Desarrollo Web
MA40 2 2,177 Último mensaje 25 Marzo 2018, 13:48 pm
por MA40
Bucle leyendo archivo que tenga cambio python
Scripting
dian1919 8 5,101 Último mensaje 13 Septiembre 2022, 05:40 am
por dian1919
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines