当前,我正在尝试将.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]
答案 0 :(得分:1)
实际上,您只读取文件的第一行,因为您仅运行reader.nextLine()
一次。
要阅读完整的文件,可以使用Files.lines()
方法并使用Java流:
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+")
。
答案 1 :(得分:0)
这可能会解决您的问题。您仅按空格分割,但换行符上有一些项目。每个操作系统都有自己的换行代码。下面的代码包含所有不同的换行符。
String [] input = reader.nextLine().trim().split("\\r?\\n|\\r");