用户输入他们想要读入的文件名?

时间:2015-02-11 17:24:01

标签: java

为了这个类任务的目的,我们被要求创建一个使用文件类的程序(我知道输入流要好得多)但是,我们必须要求用户输入.txt的名称文件。

public class input {

public static void main(String[] args) throws FileNotFoundException {
    Scanner s = new Scanner(System.in);
    String name;
    int lineCount = 0;
    int wordCount = 0;


    System.out.println("Please type the file you want to read in: ");
    name = s.next();

    File input = new File("C:\\Users\\Ceri\\workspace1\\inputoutput\\src\\inputoutput\\lab1task3.txt");
    Scanner in = new Scanner(input);

我将如何获得

 File input = new File(...); 

搜索文件只是输入'lab1task3'不起作用。

编辑:错误 -

 Exception in thread "main" java.io.FileNotFoundException: \lab1task3.txt (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.util.Scanner.<init>(Unknown Source)
at inputoutput.input.main(input.java:19)

2 个答案:

答案 0 :(得分:1)

扫描仪无法以这种方式读取文件,您需要先将其存储为文件! 如果你将它放在try-catch块中,你可以确保如果找不到文件,程序就不会中断。我建议将它包装在do-while / while循环中(取决于结构),最终条件是找到文件。

我把你的主要方法改为这个并正确编译:

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

    System.out.println("Please type the file you want to read in: ");
    String fname = sc.nextLine();

    File file = new File (fname);
    sc.close();
}

答案 1 :(得分:0)

要搜索特定文件夹中的文件,您可以通过以下方式迭代给定文件夹中的文件:

File givenFolder = new File(...);
String fileName = (...);
File toSearch = findFile(givenFolder, fileName);

函数 findFile(文件夹,String fileName)将迭代 givenFolder 中的文件并尝试查找该文件。它看起来像这样:

public File findFile(File givenFolder, String fileName)
{
   List<File> files = getFiles();
   for(File f : files)
   {
     if(f.getName().equals(fileName))
     {
       return f;
     }
   }
   return null;
}

函数 getFiles 只是迭代给定文件夹中的所有文件,并在找到文件夹时自行调用:

public List<File> getFiles(File givenFolder)
{
  List<File> files = new ArrayList<File>();
  for(File f : givenFolder.listFiles())
  {
    if(f.isDirectory())
    {
       files.addAll(getFiles(f));
    }
    else
    {
       files.add(f);
    }
  }
}

我希望这会对你有所帮助:)如果你想了解更多关于这里发生的事情,请随时问:)