2016-10-09 4 views
0

Hallo, ich habe ein Problem meines Vortrag Material zu verstehen und dachte, vielleicht hier jemand kann mir helfen, es ein bisschen besser zu verstehenVerständnis Datei Input-Output-

dies ist das Beispiel i in Vorlesung habe

private void readFileExample (String inFilename){ 
    FileInputStream fileStrm = null; 
    InputStreamReader rdr; 
    BufferedReader bufRdr; 
    int lineNum; 
    String line; 
    try { 
     fileStrm = new FileInputStream(inFilename); 
     rdr = new InputStreamReader(fileStrm); 
     bufRdr = new BufferedReader(rdr); 

     lineNum = 0; 
     line = bufRdr.readLine(); 
     while (line != null) { 
      lineNum++; 
      processLine(line); 
      line = bufRdr.readLine(); 
     } 
     fileStrm.close(); 
    } 
    catch (IOException e) { 
     if (fileStrm != null) { 
      try { fileStrm.close(); } catch (IOException ex2) { } 
     } 
     System.out.println("Error in file processing: " + e.getMessage()); 
    } 
} 

i auch hat eine Folie auf dem Parsen von cSV-Dateien

private void processLine(String csvRow) { 
    String thisToken = null; 
    StringTokenizer strTok; 
    strTok = new StringTokenizer(csvRow, ","); 

    while (strTok.hasMoreTokens()) { 

     thisToken = strTok.nextToken(); 
     System.out.print(thisToken + " "); 

    } 
    System.out.println(""); 
} 

ich die Methode Process guess in readFileExample verwendet wird, um die cSV-Datei zu trennen ist das richtig?

und auch wenn mein Verständnis richtig ist, im einen Dateinamen irgendwo eingeben sollte und rufen, dass in readFileExample aber wie würde ich das tut, kann ich mit

Scanner sc = new scanner (system.in) 
filename = sc.nextline() 

und wenn sie nicht zu viel einem einfachen Beispiel wäre toll

danke für die Hilfe.

+0

Aus der [Dokumentation für 'StringTokenizer'] (https://docs.oracle.com/javase/8/docs/api/java/util/StringTokenizer.html) -" _ 'StringTokenizer" ist eine Legacy-Klasse, die wird aus Kompatibilitätsgründen beibehalten, obwohl die Verwendung im neuen Code_ nicht empfohlen wird ". Wenn ** Oracle selbst dir sagt, dass du es nicht benutzen sollst; nicht. –

Antwort

0

Es spielt keine Rolle, wie Sie den Dateinamen eingeben.

Es kann so gehen: String fileName = new String ("myFileName");

oder die Art und Weise haben Sie:

Scanner sc = new Scanner (system.in);

Dateiname = sc.nextline();

Dann, nachdem Sie den Dateinamen gesetzt, es zu readFileExample passieren:

readFileExample (Dateiname); // Was auch immer Sie den Namen von zu bekommen, es passieren.

Und processLine Funktion, genau wie es Name ist, der für jede Zeile analysiert wird. Wenn Sie dieses Programm verwenden möchten, um eine Art von Dateianalyse zu implementieren. Benutze einfach deine Struktur oben. aber Sie müssen die processLine-Funktion ändern.

+0

für die Datei selbst muss ich den Speicherort der Datei enthalten oder kann ich es einfach in das gleiche Verzeichnis wie die Java-Datei einfügen? @Evingle –

+0

FileInputStream (String-Name) Erstellt einen FileInputStream durch Öffnen einer Verbindung zu einer tatsächlichen Datei, der Datei, die durch den Pfadnamen im Dateisystem benannt wird. https://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html. Diese zwei Wege, die du oben erwähnt hast, sollten beide funktionieren. – Evingle