在目录中搜索.txt文件,而无需完整路径名.-爪哇岛



我编写了一个文件编写脚本,可让您在控制台中写入要查找的文件,然后当您按 Enter 时,它会尝试查找该文件以查看它是否存在。我的程序可以工作,但我不喜欢每次都需要完整的路径名。我希望用户能够编写,比如说,file_name.txt,程序在单个目录中搜索它。

目前,我每次都必须使用完整的路径名。 这不是我的全部代码,但您可以看到我的文件名具有硬编码的String路径名。但是,如果其他人想在自己的计算机上运行该程序怎么办?我试图寻找答案,但Java对我来说总是非常困难。如果您知道一种方法可以使我的代码足够通用,以便我的Scanner对象可以只采用文件名,那将非常有帮助。谢谢,如果有什么不清楚的地方,请告诉我。我有一台Mac,但它应该能够在任何操作系统上运行。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.time.LocalDate;
import java.util.Scanner;

public class FileHandler {
    public static boolean fileCheck = true;
    public static File logFile;
    public static PrintWriter logPrinter;
    public static PrintWriter handMadeFile;
    public static LocalDate date = LocalDate.now();
    public static File fileFromScanner;
    public static File directory = new File("/Users/mizu/homework");
    public static String fileName;
    public static File file;
    public static String created = "Log has been created.";
    public static String myLogFileName = "/Users/mizu/homework/my_log.txt";
    public static String mainFileName = "/Users/mizu/homework/main_file.txt";
    public static String fileFromMethod = "/Users/mizu//homework/file_from_method.txt";
    public static String fileMessage = "I just wrote my own file contents.";

    public static void main(String[] args) {
        if (!directory.exists())
        {
            // create new directory called homework
            directory.mkdir();
        }
        // gets file request from user
        System.out.print("Enter file to find: ");
        Scanner in = new Scanner(System.in);
        String fileName = in.nextLine();
        // initialize the main_file
        fileFromScanner = new File(mainFileName);
        // if main_file exists or not, print message to my_log
        if (!fileFromScanner.exists())
        {
            // create my_log file (logFile), to keep track of events
            writeToLog(created);
            writeToLog("File path you entered: "
                    + fileName + " does not exist.");
            System.out.println(fileName + " - does not exist.");
            // create file since it doesn't exist
            File mainFile = new File(mainFileName);
            try {
                PrintWriter pwMain = new PrintWriter(new BufferedWriter
                        (new FileWriter(mainFile)));
                writeToLog("Created " + mainFileName);
                pwMain.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        else
        {
            writeToLog(fileName + " already exists.");
            System.out.println(fileName + " - already exists.");
        }
        // use writeToFile method to write file, create new file name
        FileHandler testFile = new FileHandler(fileFromMethod);
        testFile.writeToFile(testFile, fileMessage);
    } // end Main

所有其他方法都在这里,但为了保持简短,没有显示。

如评论中所述,已经有几种工具可用于搜索目录中的文件。但是,为了回答您的问题,我编写了一个简单的程序,该程序应该可以满足您的需求:

public static void main(String[] args) {
    // Get the absolute path from where your application has initialized
    File workingDirectory = new File(System.getProperty("user.dir"));
    // Get user input
    String query = new Scanner(System.in).next();
    // Perform a search in the working directory
    List<File> files = search(workingDirectory, query);
    // Check if there are no matching files
    if (files.isEmpty()) {
        System.out.println("No files found in " + workingDirectory.getPath() + " that match '"
                + query + "'");
        return;
    }
    // print all the files that matched the query
    for (File file : files) {
        System.out.println(file.getAbsolutePath());
    }
}
public static List<File> search(File file, String query) {
    List<File> fileList = new ArrayList<File>();
    // Get all the files in this directory
    File[] files = file.listFiles();
    if (files != null) {
        for (File f : files) {
            if (f.isDirectory()) {
                // use recursion to search in all directories for the file
                fileList.addAll(search(f, query));
            } else if (f.getName().toLowerCase().contains(query.toLowerCase())) {
                // if the filename matches the query, add it to the list
                fileList.add(f);
            }
        }
    }
    return fileList;
}

1- 您可以让用户将环境变量设置为您的路径,并在代码中使用路径名。

2-您可以检查操作系统,并将文件放在众所周知的文件夹中。(C:对于Windows,/home用于Ubuntu,/WhateverMacFolder用于Mac,如果是其他操作系统,请用户输入路径。

3-您可以在程序的默认路径中创建一个文件夹并使用它。

最新更新