如何读取文件并将其存储在java中的数组中

时间:2013-11-07 12:36:19

标签: java arrays string store

我想读取一个文本文件并将其存储为java中的字符串多维数组。

输入将是这样的

11 12 13

12 11 16

33 45 6

我想将其存储在

 String[][] as={{"11","12","13"},
       {"12","11","16"},
       {"33","45"}};

我的代码

String file="e:\\s.txt";

         try
       {
       int counterCol=0,counterRow=0;

       String[][] d=null;

       BufferedReader bw=new BufferedReader(new FileReader(file));


        String str=bw.readLine();

        String[] words=str.split(",");

        System.out.println(words.length+"Counterrow");

    counterCol=words.length; //get total words split by comma : column

         while(bw.readLine()!=null)
        {

            counterRow++;    
  // to get the total words as it gives total row count
        }

         String[][] d=new String[counterRow][counterCol];
        for(int x=0;x<counterRow;x++)
        {

            for(int y=0;y<counterCol;y++)
            {

       d[x][y]=bw.readLine();  
   //storing in array. But here gives me the exception
            }

        }

但是当我得到空指针异常时,我无法将其存储在数组中。如何克服这个问题

2 个答案:

答案 0 :(得分:2)

这里有点不对劲:

  1. 数组未初始化
  2. 您没有使用BufferedReader
  3. 循环文件行
  4. 您将按照示例数据
  5. 中指定的逗号而不是空格进行拆分

    使用Java Collections将在这里为您提供帮助。具体来说是ArrayList

    给这样的东西吧:

    String file="e:\\s.txt";
    
            try {
                int counterRow = 0;
    
                String[][] d = new String[1][1];
    
                BufferedReader bw = new BufferedReader(new FileReader(file));
    
                List<List<String>> stringListList = new ArrayList<List<String>>();
    
                String currentLine;
    
                while ((currentLine = bw.readLine()) != null) {
                    if (currentLine != null) {
                        String[] words = currentLine.split(" ");
                        stringListList.add(Arrays.asList(words));
                    }
                }
    
                // Now convert stringListList into your array if needed
                d = Arrays.copyOf(d, stringListList.size());
    
                for (List<String> stringList : stringListList) {
    
                    String[] newArray = new String[stringList.size()];
    
                    for (int i = 0; i < stringList.size(); i++) {
                        newArray[i] = stringList.get(i);
                    }
    
                    d[counterRow] = newArray;
    
                    counterRow ++;
                }
    
            } catch (Exception e) {
                // Handle exception
            }
    

答案 1 :(得分:1)

你得到NullPointer,因为你的数组'd'是空的:

String[][] d=null;

初始化它应该可以工作:

String[][] d= new String [counterCol][counterRow];