读取文件

时间:2017-02-20 02:23:41

标签: java

我正在执行此程序,当我在代码中看到打印时,我在输出结束时不断出现“null”错误。它确实读取文件,但最后,它添加了很多null。任何指导将不胜感激! 这就是我到目前为止所做的尝试。

public static void main(String[] args) throws Exception
{
    Stack nifo=new Stack();
    FileReader file = new FileReader("infix.dat");
    try (BufferedReader br = new BufferedReader(file)) {
        String [] words = new String[50];
        String text="";
        int ctrl = 0;
        String Line =br.readLine();
        while (Line!= null)
            {
            words[ctrl]= Line;
            Line = br.readLine();
            ctrl = ctrl + 1;
            }//end of while loop


            for (int i = 0; i < words.length; i++)
             {
            System.out.println(words[i]);
             }
            file.close();
        } catch (IOException e) {
        e.printStackTrace();
    }//end of catch

}//end of main class

我的输出如下。如您所见,在我读完文件后,最后会打印出null。

 5 * 6 + 4
 3 - 2 + 
 ( 3 * 4 - (2 + 5)) * 4 / 2
 10 + 6 * 11 -(3 * 2 + 14) / 2
  2 * (12 + (3 + 5 ) * 2
   null
   null
   null
   null
   more nulls after that.

谢谢!

2 个答案:

答案 0 :(得分:1)

您声明一个固定大小的数组:

String[] words = new String[50];

然后在其中存储一些值,然后打印每个元素:

for (int i = 0; i < words.length; i++) {
    System.out.println(words[i]);
}

您未使用的所有元素均为null。因此,如果您的文件有6行,它将打印这6行,然后是44个空值,因为您没有在阵列的其他44个插槽中放置任何内容。我建议你使用不同的数据结构,如列表。这将允许您仅存储所需的值的数量。

试试这个:

public static void main(String[] args) throws Exception
{
    Stack nifo=new Stack();
    FileReader file = new FileReader("infix.dat");
    try (BufferedReader br = new BufferedReader(file)) {
        List<String> words = new LinkedList<>(); //replaced your array with a list
        String text="";
        String Line =br.readLine();
        while (Line!= null)
            {
            words.add(Line);
            Line = br.readLine();
            }//end of while loop

            for (String word : words)
             {
            System.out.println(word);
             }
            file.close();
        } catch (IOException e) {
        e.printStackTrace();
    }//end of catch

}//end of main class

答案 1 :(得分:0)

由于您不确定数组大小以及是否要坚持使用数组,因此以下内容可能会解决您的问题

        for (int i = 0; i < words.length && words[i] != null; i++)
         {
            System.out.println(words[i]);
         }
        file.close();

确保您的循环不处理words数组中任何索引的空值。因为当您声明修复大小的数组

时,数组中从未填充的索引被初始化为null