Java 在文件夹中搜索.txt文件并打印文本文件的内容?

Java 在文件夹中搜索.txt文件并打印文本文件的内容?,java,input,file-io,output,Java,Input,File Io,Output,我一直在试图找到一种方法,基本上在文件夹中搜索.txt文件(文本文件的名称基于用户输入),然后吐出该文本文件的内容。如何通过Java.io实现这一点 到目前为止我做了什么 import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class searchDemo { public static void main(String[] args) throws FileN

我一直在试图找到一种方法,基本上在文件夹中搜索.txt文件(文本文件的名称基于用户输入),然后吐出该文本文件的内容。如何通过Java.io实现这一点

到目前为止我做了什么

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
               **/
            }
        }


     }
}
我的任务是:允许用户搜索一个人的名字,如果这个人的名字(在一个文件中)存在于.txt版本中,那么它将打印出.txt文件中的内容


例如:如果一个人搜索“John Legend”,并且在一个文件中有一个名为“John Legend.txt”的文件,那么它将打印出“John Legend.txt”文件的内容

您在这里显示的代码不会进入If子句,因为
nameTweets
将始终是
“/Users/John/Documents/workspace/Axis Powers/Users”
,因此,
nameTweets.equalsIgnoreCase(name)
将为false

为了让您的代码正常工作,我将删除您的
扫描仪扫描
,并使用,以便获取目录中的所有文件。之后,如果条件得到验证,您只需读取文件(例如,使用a)并打印出行

下面我为您提供了一个代码块,可以实现您想要的功能

完整代码

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();
                }
            }
       }
    }
}
其他注释

  • 不要忘记关闭扫描仪/缓冲区阅读器(一般为流)。这一点非常重要,因为如果不关闭程序,在程序执行过程中可能会导致资源泄漏

存在不一致性。任务显示“如果该人的姓名(在文件中)”意味着您必须搜索该文件的内容。您说您只在查找名称与此人匹配的文件。这些是非常不同的任务。请澄清你的意思。此外,您正试图在目录上打开一个
扫描仪
,但这将不起作用。最后,你还没有解释你有什么问题。@JimGarrison啊!对不起,我的意思是“如果一个人的名字(在一个文件夹中)存在于一个.txt文件版本中…”&在示例的底部;我的意思是“如果一个人搜索[John Legend],在一个文件夹中有一个名为[John Legend.txt]的文件,它会打印出[John Legend.txt]文件的内容”。我遇到的问题是,我不太确定该怎么做(从用户输入)该名称和nameTweets(.txt文件)是相同的,以便打印.txt文件的内容您遇到了什么问题?请访问并阅读以了解使用此网站的指南。显示错误消息,如果有堆栈跟踪,请确保包含完整的堆栈跟踪,包括所有“由”部分,并指示代码中的哪个语句引发了异常。将堆栈跟踪格式化为代码(缩进4个空格或使用
{}
按钮),然后打印。