java - 如何为用户输入搜索的文本文件创建数组?
问题描述
我正在处理一项任务,其中程序需要读取用户输入的文件。扫描文件并创建一个数组。该数组将单词存储为字符串,并输出单词已使用的次数。然后,将输出打印到一个新文件中。
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 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);
}
}
}
推荐阅读
- python - 在python中对数据框中的数据进行分组
- javascript - FormData 推送数组中的项
- java - 如何降低我的方法的圈复杂度
- java - 在 Java 中将 curl 请求复制到 Jenkins
- java - 是否可以使可选
和@Lazy 在春天一起工作? - ios - 以编程方式快速更改 Xib 高度
- coded-ui-tests - codedu ui 为被测程序提供访问被拒绝错误
- python-3.x - TypeError:“模块”对象在 pytorch 中不可调用
- python - 如何在任何 WordPress 网页上使用 python 代码
- lldb - 通过脚本桥启动交互式会话