2011-09-17 31 views
7

Estoy tratando de leer desde las dos primeras líneas de un archivo txt, ponerlo en una cadena y pasar esa cadena a mis métodos. Estoy confundido sobre lo que tengo que hacer en el método principal.Cómo leer en un archivo txt

Esto es lo que tengo:

public class TestingClass { 
Stacked s;// = new Stacked(100); 
String Finame; 

public TestingClass(Stacked stack) { 
    //Stacked s = new Stacked(100); 
    s = stack; 
    getFileName(); 
    readFileContents(); 
} 

public void readFileContents() { 
    boolean looping; 
    DataInputStream in; 
    String line = "" ; 
    int j, len; 
    char ch; 

    try { 
     in = new DataInputStream(new FileInputStream(Finame)); 
     len = line.length(); 
     for(j = 0; j<len; j++) { 
       System.out.println("line["+j+"] = "+line.charAt(j)); 
     } 
    } 

    catch(IOException e) { 
      System.out.println("error " + e); 
    } 
} 

public void getFileName() { 
    Scanner in = new Scanner(System.in); 
    System.out.println("Enter File Name"); 
    Finame = in.nextLine(); 
    System.out.println("You Entered " + Finame); 
} 

     public static void main(String[] args) { 
     Stacked st = new Stacked(100); 
     TestingClass clas = new TestingClass(st); 
     //String y = new String("(z * j)/(b * 8) ^2"); 
     // clas.test(y); 

     } 

Probé cadena x = new String (x.getNewFile()) No estoy seguro de si esa es la manera correcta de ir con eso o no.

Respuesta

6

Prueba esto:

File file = new File("file.txt"); 

BufferedReader reader = new BufferedReader(new FileReader(file)); 
String line1 = reader.readLine(); 
String line2 = reader.readLine(); 
+0

¿Debo intentar atrapar tal vez? – TMan

+0

puede rodear con try/catch block para atrapar la excepción de E/S. O su método podría tener un tiro para la excepción. – Justin

+0

No obtengo ninguno cuando lo ejecuto. Para probarlo pasé line1 en un método clas.test (line1) ... No obteniendo ningún tipo de salida – TMan

1

La lectura de un archivo txt suele ser bastante sencilla.

Debe usar un BufferedReader ya que solo desea las dos primeras líneas.

FileReader fr = new FileReader(filename); 
BufferedReader br = new BufferedReader(fr); 
linecount = 0; 
StringBuilder myline = new StringBuilder(); 
String line = ""; 

while ((linecount < 2) && ((line = br.readLine()) != null)) { 
    myline.append(line); 
    linecount++; 
} 

// now you have two lines in myline. close readers/streams etc 
return myline.toString(); 

Debe cambiar la firma de su método para devolver la cadena. Ahora, se puede decir

String x = clas.getFileContent(); 
3

Es incluso más fácil en Java 1.5 +. Use la clase Scanner. Aquí hay un example. En esencia, se reduce a:

import java.io.*; 
import java.util.Scanner; 
public static void main(String... aArgs) throws FileNotFoundException { 
    String fileName = "MYFILE HERE"; 
    String line = ""; 
    Scanner scanner = new Scanner(new FileReader(fileName)); 
    try { 
     //first use a Scanner to get each line 
     while (scanner.hasNextLine()){ 
     line = scanner.nextLine(); 
     } 
    } 
    finally { 
     //ensure the underlying stream is always closed 
     //this only has any effect if the item passed to the Scanner 
     //constructor implements Closeable (which it does in this case). 
     scanner.close(); 
    } 
    } 

... así que no hay realmente ninguna razón para que usted tenga un método() getFileContents. Solo usa Scanner.

Además, todo el flujo del programa podría usar alguna reestructuración.

  • No declarar una Apilada dentro de su método principal. Es probable que es lo que su clase de prueba debe encapsular.

    En su lugar, escriba un método privado String estático para leer el nombre del archivo desde el teclado, luego páselo a su objeto TestingClass.

  • Su constructor TestingClass debe llamar a un método privado que abre ese archivo, y lee en el primer 2 (o sin embargo muchos lo demás terminas queriendo) líneas en las variables de clase privadas.

  • A continuación, puede instanciar una nueva clase Apilada.

Para obtener buenos encapsulación principios, tienen sus TestClass proporcionan métodos públicos que el programa del controlador (la clase con el public void principal método estática() se puede llamar para acceder a los datos de instancia apiladas sin permitir el acceso a el objeto apilado directamente (violando así el Law of Demeter).

Probablemente este consejo parezca un poco confuso en este momento, pero hágase el hábito de hacer esto y con el tiempo se encontrará escribiendo mejores programas que sus compañeros.

+0

En otras palabras, usó la interfaz del escáner para leer los datos de la consola (System.in es un InputStream). Puede usar la misma interfaz _de la misma manera_ para leer desde el archivo. –

0

// -------------------------------------------- ----------------------------- // leer archivo local:

String content = ""; 
     try { 
      BufferedReader reader = new BufferedReader(new FileReader(mVideoXmlPath)); 
      do { 
       String line; 

       line = reader.readLine(); 

       if (line == null) { 
        break; 
       } 
       content += line; 
      } 
      while (true); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 

cheque esto: =)

Cuestiones relacionadas