首页 > 解决方案 > 如何为用户输入搜索的文本文件创建数组?

问题描述

我正在处理一项任务,其中程序需要读取用户输入的文件。扫描文件并创建一个数组。该数组将单词存储为字符串,并输出单词已使用的次数。然后,将输出打印到一个新文件中。

package TestFileReader;

import java.io.*;
import java.util.*;

public class ReadFile
{

public static void main(String[] args)
{
    //Prompts user for file by asking for its location
    Scanner keys = new Scanner(System.in);
    String fileName;

    System.out.print("Enter file location, or 'Quit' to quit: ");
    fileName = keys.nextLine();

    Scanner textFile = null;

    //try catch block for exception
    try
    {
        textFile = new Scanner(new File(fileName));
    }
    catch(FileNotFoundException s)
    {
        System.out.println("File not found, confirm location: ");
    }

    //File will be read continuously until there is no next line
    while(textFile.hasNextLine())
    {
        String contents = textFile.nextLine();
        System.out.println(contents);
    }

    textFile.close();



    //New Class for saving read into array
}
}

标签: java

解决方案


从 Java 8 开始,您还可以使用 Streams API 来完成此任务。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ReadFile {

    public static void main(String[] args) {
        //Prompts user for file by asking for its location
        Scanner keys = new Scanner(System.in);
        String fileName;

        System.out.print("Enter file location, or 'Quit' to quit: ");
        fileName = keys.nextLine();

        try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
            stream.flatMap(s -> Stream.of(s.split("\\W")))
                    .filter(s -> s != null && !s.isEmpty())
                    .collect(Collectors.toMap(s -> s, s -> 1, Integer::sum))
                    .forEach((k, v) -> System.out.println(k + ": " + v));
        } catch (IOException e) {
            System.out.println("Cannot read file: " + fileName);
        }
    }
}

推荐阅读