如何读取文件并将其保存到2D阵列?

时间:2016-06-20 07:51:36

标签: java file char 2d

我想在2d数组中读取和保存文件的内容,但我不知道文件的大小,因为程序应该读取不同的文件。所以“新问题”之后出现了第一个问题。我搜索了这个问题,发现“matrix [x] [y] = zeile.charAt(x);” 应该是正确的,但是当我将任何数字写入新char的第一个括号时,会抛出错误“NullPointerException”。 有人可以解释并给出一些想法或解决方案吗?谢谢:))

import java.io.*;

class Unbenannt
{
  public static void main(String[] args) throws IOException
  {
    FileReader fr = new FileReader("Level4.txt");
    BufferedReader br = new BufferedReader(fr);

    String zeile = br.readLine();
    char [][] matrix = new char [][];

    while(zeile != null )
    {
      int y = 0;
      for(int x = 0; x < zeile.length(); x++) {
          matrix[x][y] = zeile.charAt(x);
       }
       y++;
    } System.out.print(matrix);
    br.close(); 
   }
}

3 个答案:

答案 0 :(得分:0)

初始化矩阵(char [] [])但你从不初始化任何入站数组。这导致NullPointerException。

此外,您的'while'条件看起来无效,您似乎只是在这里阅读文件的第一行&gt;你的代码永远不会完成并反复阅读第一行

答案 1 :(得分:0)

数组作为块存储在内存中以实现O(1)操作,这就是您需要在定义期间定义其大小的原因。如果您坚持使用数组(而不是动态ADT,例如List),则需要提前知道维度。

您可以做的是暂时将文件行存储在列表中并找出最大行长度,即:

List<String> lines = new ArrayList<String>();
String zeile = null;
int max = 0;

while ((zeile = br.readLine()) != null) {
   lines.add(zeile);
   if (zeile.length() > max)
      max = zeile.length();
}

char[][] matrix = new char[lines.length()][max];

// populate the matrix:
for (int i = 0; i < lines.length(); i++) {
   String line = lines.get(i);
   for (int j = 0; j < line.length(); j++) {
       matrix[i][j] = line.charAt(j);
   }
}

请注意,由于char是基元,因此在内部数组的每个单元格中使用默认值0(整数,而不是字符!)进行初始化,因此对于较短的行与其他人相比,你将有零个字符。

答案 2 :(得分:0)

谢谢大家!有用!但仍有一个问题。我将lines.length()更改为lines.size(),因为它不适用于长度。问题是输出。它显示例如:xxxx xxxx而不是&#34; xxx&#34;和&#34; x x&#34;和&#34; xxx&#34;彼此之间。 我怎样才能建立一个换行符? 我的程序代码是:

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


class Unbenannt
{
  public static void main(String[] args) throws IOException
  {
    FileReader fr = new FileReader("Level4.txt");
    BufferedReader br = new BufferedReader(fr);

    ArrayList<String> lines = new ArrayList<String>();
    String zeile = null;
    int max = 0;
    while ((zeile = br.readLine()) != null) {
        lines.add(zeile);
        if (zeile.length() > max)
            max = zeile.length();
    }
    char [][] matrix = new char[lines.size()][max];

    for(int i = 0; i < lines.size(); i++) {
        String line = lines.get(i);
        for(int j = 0; j < line.length(); j++) {
            matrix[i][j] = line.charAt(j);
            System.out.print(matrix[i][j]);
        }   
    }
    br.close();
   }    
}