2011-09-17 28 views
7

Sto provando a leggere da che cosa è sulle prime due righe di un file txt, metterlo su una stringa e passare quella stringa sui miei metodi. Sono confuso su ciò che devo fare nel metodo principale.Come leggere in un file txt

Heres quello che ho:

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); 

     } 

ho provato String x = new String (x.getNewFile()) non sono sicuro se questo è il modo giusto per andare con quella o no.

risposta

6

Prova questa:

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

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

Devo provare a prendere forse? – TMan

+0

puoi circondare con try/catch block per catturare l'eccezione I/O sicura. O il tuo metodo potrebbe avere un lancio per l'eccezione. – Justin

+0

Non ne trovo nessuno quando lo eseguo. Per testarlo ho passato line1 in un metodo clas.test (line1) ... Non ottenendo alcun tipo di output – TMan

1

La lettura da un file txt è in genere piuttosto semplice.

È necessario utilizzare un BufferedReader poiché si desidera solo le prime due linee.

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(); 

È necessario modificare la firma del metodo per restituire la stringa. Ora, si può dire

String x = clas.getFileContent(); 
3

E 'ancora più semplice in Java 1.5 +. Utilizzare la classe Scanner. Ecco un example. In sostanza, si riduce 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(); 
    } 
    } 

... quindi non c'è davvero alcun motivo per voi di avere un metodo() getFileContents. Basta usare lo scanner.

Inoltre, l'intero flusso del programma potrebbe utilizzare alcune ristrutturazioni.

  • Non dichiarare impilato all'interno del metodo principale. È probabile che sia che è la classe di test incapsulare.

    Invece, scrivere un metodo String statico privato per leggere il nome del file dalla tastiera, quindi passarlo all'oggetto TestingClass.

  • tuo costruttore TestingClass deve chiamare un metodo privato che si apre quel file, e legge nei primi 2 (o comunque molti altrimenti si finisce per vogliono) linee in variabili di classe private.

  • Successivamente è possibile creare un'istanza di una nuova classe in pila.

Per buoni incapsulamento principi, hanno i tuoi TestClass forniscono metodi pubblici che il programma del driver (la classe con il principale metodo public static void() può chiamare per accedere ai dati di istanza Stacked senza consentire l'accesso ai l'oggetto in pila direttamente (quindi violando lo Law of Demeter).

Probabilmente questo consiglio sembrerà un po 'confuso in questo momento, ma prendi l'abitudine di farlo e in tempo ti troverai a scrivere programmi migliori rispetto ai tuoi colleghi.

+0

In altre parole, hai utilizzato l'interfaccia dello scanner per leggere i dati dalla console (System.in è un InputStream). È possibile utilizzare la stessa interfaccia _ allo stesso modo_ per leggere dal file. –

0

// -------------------------------------------- ----------------------------- // leggere nel file locale:

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(); 
     } 

controllo this: =)

Problemi correlati