Java将文件值存储到数组中

时间:2019-03-21 18:17:39

标签: java arrays file

当前,我正在尝试将.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]

2 个答案:

答案 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");