[英]Java storing file values into an array
目前我正在尝试将 .prg 文件中的所有文件读入一个数组。 目前我的代码只读取文件的第一行。 我想读取文件中的每个单词并将其存储在一个数组中。 我相信问题出在我拆分文件的方式上,但我似乎找不到解决方案
代码如下:
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
public class Reader {
private Scanner reader
public Reader(String fileName){
try {
reader = new Scanner(new File(fileName));
} catch (FileNotFoundException e){
e.printStackTrace();
}
}
public String[] getInput() {
String [] input = reader.nextLine().trim().split(" ");
return input;
}
}
public class Player {
private String[] PlayerInformation;
private String pName;
public Player(String gName) {
this.pName = gName;
this.reader = new
Reader("C:\\SpaceInvader\\Files\\PlayerInfo.prg");
this.PlayerInformation= reader.getInput();
}
public void ArrayPrintTest() {
System.out.println(Arrays.toString(this.PlayerDetails));
}
public class Game {
public Game() {
}
public static void main(String[] args){
Player player = new Player("Player1");
player.ArrayPrintTest();
}
}
文件格式:
Instruction 1
Jane
ForwardBackUpDown
电流输出
[Instruction, 1]
预期产出
[Instruction, 1, Jane, ForwardBackUpDown]
这可能会解决您的问题。 您只是按空格拆分,但换行符上有一些项目。 每个操作系统都有自己的新行代码。 下面的代码包含所有不同的换行代码。
String [] input = reader.nextLine().trim().split("\\r?\\n|\\r");
您实际上只读取文件的第一行,因为您只运行reader.nextLine()
一次。
要读取完整的文件,您可以使用Files.lines()
方法并使用 Java Streams:
List<String> words = Files.lines(Paths.get(fileName))
.map(String::trim)
.map(line -> line.split(" "))
.flatMap(Arrays::stream)
.collect(Collectors.toList());
如果你希望你的结果是一个数组,你可以使用Stream.toArray()
方法而不是Stream.collect()
:
String[] words = Files.lines(Paths.get(fileName))
.map(String::trim)
.map(line -> line.split(" "))
.flatMap(Arrays::stream)
.toArray(String[]::new);
如果你想在没有Files.lines()
方法的情况下读取文件,你可以使用以下方法:
List<String> lines = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)))) {
String line;
while ((line = br.readLine()) != null) {
lines.add(line);
}
}
现在您可以使用lines.stream()
并继续使用第一种方法。
最后一个提示:如果你想用任何空格分割,而不仅仅是" "
你可以使用line.split("\\\\s+")
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.