2017-11-20 6 views
-1

Ich habe versucht, eine Methode zu finden, im Grunde innerhalb eines Ordners für eine TXT-Datei zu suchen (Name der Textdatei basiert auf Benutzereingabe) und spuckt dann den Inhalt dieser Textdatei aus. Wie würde ich das über Java.io machen?In einem Ordner nach TXT-Datei suchen und Inhalt der Textdatei drucken?

Was ich bisher getan habe

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class searchDemo { 

public static void main(String[] args) throws FileNotFoundException{ 
    Scanner keyboard = new Scanner(System.in); 

    System.out.println("Who would you want to search for?"); 
    String name = keyboard.nextLine(); 

    File dir = new File("/Users/john/Documents/workspace/Axis Powers/users"); 

     Scanner scan = new Scanner("/Users/john/Documents/workspace/Axis Powers/users"); 

     String nameTweets = scan.nextLine(); 
     for(File file : dir.listFiles()){ 
      if(file.isFile() && nameTweets.equalsIgnoreCase(name) && nameTweets.endsWith(".txt")){ 
       System.out.println(name); 
       System.out.println(nameTweets); 
       /** 
       I was getting bugs at this time so I printed the 
       user input first and then the ".txt" file version of 
       the user input to see what was printing and it 
       obviously wasn't what I wanted it to do 
       **/ 
      } 
     } 


    } 
} 

Hier war die Aufgabe, die ich gegeben wurde: Lassen Sie ein Benutzer den Namen einer Person suchen, und wenn den Namen dieser Person vorhanden ist (innerhalb einer Datei) in einer TXT Version dann würde es den Inhalt der TXT-Datei drucken

Zum Beispiel: Wenn eine Person sucht "John Legend" und in einer Datei gibt es eine Datei namens "John Legend.txt", dann würde es ausdrucken Inhalt der Datei "John Legend.txt"

+0

Es gibt eine Inkonsistenz. Die Aufgabe sagt _ "ob der Name dieser Person existiert (innerhalb einer Datei)" _ was bedeutet, dass Sie den Inhalt der Datei durchsuchen müssen. Sie sagen, dass Sie nur nach einer Datei suchen, deren Name mit der Person übereinstimmt. Dies sind sehr unterschiedliche Aufgaben. Bitte klären Sie, welchen Sie meinen. Außerdem versuchen Sie, einen 'Scanner' in einem Verzeichnis zu öffnen, das nicht funktioniert. Schließlich haben Sie nicht erklärt, welches Problem Sie haben. –

+0

@JimGarrison ahhh! Entschuldigung, ich meinte "wenn eine Person ein Name (in einem Ordner) in einer .txt-Dateiversion existiert ...." und auch unten für das Beispiel; Ich meinte "wenn eine Person nach [John Legend] sucht und in einem FOLDER eine Datei namens [John Legend.txt] ist, würde sie den Inhalt der Datei [John Legend.txt] ausdrucken." Das Problem, das ich habe, ist dass ich nicht ganz sicher bin, was zu tun ist, so dass Name (von Benutzereingabe) & nameTweets (.txt-Datei) die gleichen sind, so dass der Inhalt der TXT-Datei gedruckt würde – Sweetcharge

+0

Welche Probleme begegnen Sie? Bitte besuchen Sie die [Hilfe] und lesen [fragen], um die Richtlinien für die Nutzung dieser Website zu erfahren. Zeigen Sie Ihre Fehlermeldungen, und wenn Sie eine Stapelüberwachung haben, stellen Sie sicher, dass die COMPLETE-Stack-Ablaufverfolgung einschließlich aller "Caused By" -Abschnitte enthält, und geben Sie an, welche Anweisung in Ihrem Code die Ausnahme ausgelöst hat. Formatieren Sie den Stack-Trace als Code (drücken Sie 4 Leerzeichen oder verwenden Sie die Schaltfläche '{}') –

Antwort

0

Der Code, den Sie hier zeigen, wird nicht erhalten in die if-Klausel seit nameTweets wird immer "/Users/john/Documents/workspace/Axis Powers/users" sein, und daher wird nameTweets.equalsIgnoreCase(name) falsch sein.

Um Ihren Code arbeiten zu lassen, würde ich Ihre Scanner scan entfernen und stattdessen listFiles() verwenden, um alle Dateien in Ihrem Verzeichnis zu erhalten. Wenn die Bedingung dann überprüft wird, müssen Sie nur die Datei lesen (z. B. mit einem BufferedReader) und drucken Sie die Zeilen aus.

Unten stelle ich Ihnen einen Codeblock zur Verfügung, der erreicht, was Sie wollen.

FULL CODE

package testsplit; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Scanner; 

public class Fraction { 

    public static void main(String[] args) { 
     Scanner keyboard = new Scanner(System.in); 

     System.out.println("Who would you want to search for?"); 
     String name = keyboard.nextLine(); 
     name += ".txt"; 

     keyboard.close(); 

     File dir = new File("/Users/john/Documents/workspace/Axis Powers/users"); 
     File[] listOfFiles = dir.listFiles(); 

     String filename, line; 

     for(File file : listOfFiles) { 
      filename = file.getName(); 

      if(file.isFile() && filename.equalsIgnoreCase(name) && filename.endsWith(".txt")){ 

       try { 
        BufferedReader br = new BufferedReader(new FileReader(dir+"/"+filename)); 

        while((line = br.readLine()) != null) { 
         System.out.println(line); 
        } 

        br.close(); 

       }catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

Sonstige Erläuterungen

  • NICHT VERGESSEN auf Scanner/BufferedReaders (Streams im Allgemeinen) zu schließen. Es ist sehr wichtig, da es während der Ausführung eines Programms zu Ressourcenverlusten führen kann, wenn Sie sie nicht schließen.
Verwandte Themen