2
package vista;

import core.core;

/**
 *
 * @author geovanny9596
 */
public class vista {

    public static void main(String[] args) {
        //leer un TXT

        core c = new core();
        String s1 = c.leerTxt("C:\\Users\\geovanny9596\\Downloads\\numeros.txt");

        System.out.println(s1);

        String[ ] nombre = new String[s1];


    }


}

package core;

import java.io.BufferedReader;
import java.io.FileReader;

/**
 *
 * @author geovanny9596
 */
public class core {


     public String leerTxt(String direccion){ //direccion del archivo

        String texto = "";

        try{
            BufferedReader bf = new BufferedReader(new FileReader(direccion));
            String temp = "";
            String bfRead;
            while((bfRead = bf.readLine()) != null){ 
                //haz el ciclo, mientras bfRead tiene datos
                temp = temp + "\n" + bfRead; //guardado el texto del archivo
            }

            texto = temp;

        }catch(Exception e){ 
            System.err.println("No se encontro archivo");
        }

        return texto;

    }
}

El bloc de notas:

1000
60
3
1
50
300
JohnnyTB
  • 2,592
  • 1
  • 8
  • 17
  • 1
    ¿Porque los concatenas en un String si los puedes ir almacenando en un List de Integers directamente? – JDev Sep 24 '18 at 08:40
  • 1
    Hola. Por convenio, nombra las clases Java con la primera letra en mayúscula. – Orici Sep 24 '18 at 08:48

2 Answers2

2

¿Como puedo guardar los numeros de un bloc de notas en un array en java?, para despues ordenar esos numeros.

Para recuperar los datos obtenidos y guardarlos en un array, podemos trabajar con el método split(String regex), el cual define un separador y recibe como parámetro una expresión regular y nos retorna String[]

String[] numsStr = s1.split("\\n");

Y para hacer la ordenación tenemos el método sobrecargado java.util.Arrays.sort(numeros), el cual nos hace una ordenación de una forma ascendente


También en tu método leerTxt() cambia el salto de línea que tienes así: temp = temp + "\n" + bfRead;, por esta manera temp += bfRead+"\n";, para que te añada antes la cadena y después le añades el salto de línea, no antes como estabas haciendo, sino tendrás problemas a la hora de hacer la conversión de Strings a ints

String[] numsStr = s1.split("\\n");
int[] numeros =  new int[numsStr.length];
for (int i = 0; i < numsStr.length; i++) {
     numeros[i] = Integer.parseInt(numsStr[i]);
}

Ejemplo:

public class PrincipalCore {
    public static void main(String[] args) {
        //leer un TXT
        Core c = new Core();
        String s1 = c.leerTxt("C:\\Users\\miusuario\\Desktop\\numeros.txt");
        System.out.println(s1 + "");

        String[] numsStr = s1.split("\\n");
        int[] numeros =  new int[numsStr.length];
        for (int i = 0; i < numsStr.length; i++) {
            //if(!numsStr[i].trim().equals(""))
                numeros[i] = Integer.parseInt(numsStr[i]);
        }
        //imprimimos numeros sin ordenar y tal cual los tenemos en nuestro array
        for (int numero : numeros) {
            System.out.print(numero + " ");
        }

        System.out.println("");
        //ordenamos
        java.util.Arrays.sort(numeros);
        for (int numero : numeros) {
            System.out.print(numero + " ");
        }
    }
}


class Core {
    public String leerTxt(String direccion) {
        String texto = "";
        try (BufferedReader bf = new BufferedReader(new FileReader(direccion))) {
            //StringBuilder temp = new StringBuilder();
            String temp = "";
            String bfRead;
            while((bfRead = bf.readLine()) != null){ 
                //haz el ciclo, mientras bfRead tiene datos
                //temp.append(bfRead).append("\n");
                temp += bfRead+"\n"; //guardado el texto del archivo
            }

            texto = temp.toString();


        } catch (FileNotFoundException ex) {
            System.out.println("No se encontró el archivo");
        } catch (IOException ex) {
            System.out.println("Excepcion " + ex.getMessage());
        }

        return texto;
    }
}

Resultado:

introducir la descripción de la imagen aquí



Actualización..

El método readLine() en el while, lo que hará será devolvernos un String del contenido leído de una línea o nulo 'null' si se ha alcanzado el final de la secuencia.

Entendido esto, y sabiendo que en el fichero de texto la información que tenemos son números, podríamos recoger el contenido de cada línea, osea un número y añadirlo a una Lista 'List' de tipo Integer, como bien han comentado.

public List leerTxt2(String direccion) {
        List<Integer> listNums = new ArrayList<>();
        try (BufferedReader bf = new BufferedReader(new FileReader(direccion))) {

            String bfRead;
            while((bfRead = bf.readLine()) != null){ 
                listNums.add(Integer.parseInt(bfRead));
            }

        } catch (FileNotFoundException ex) {
            System.out.println("No se encontró el archivo");
        } catch (IOException ex) {
            System.out.println("Excepcion " + ex.getMessage());
        }

        return listNums;
    }

Y ahora en el main..

//Obtenemos nuestra lista
    List<Integer> lNums = c.leerTxt2("C:/Users/miusuario/Desktop/numeros.txt");

System.out.println("\nImprimimos tal cual están en la lista");
    for (Integer num : lNums) {
        System.out.print(num+ "   ");
    }

    //Ordenamos
    Collections.sort(lNums);
    System.out.println("\nAhora los tenemos ordenados");
    for (Integer num : lNums) {
        System.out.print(num+ "   ");
    }

Resultado:

introducir la descripción de la imagen aquí

Diego L o L
  • 1,739
  • 2
  • 8
  • 17
0

Puedes usar el método split:

String[ ] nombre = s1.split(" ");
Jocksan Cruz
  • 377
  • 1
  • 10
  • Marcada como duplicada: [ https://es.stackoverflow.com/questions/45846/c%C3%B3mo-separar-un-string-en-java-c%C3%B3mo-utilizar-split ] – Jocksan Cruz Sep 24 '18 at 04:13