首页 > 解决方案 > Java,无法从文件中读取

问题描述

每当我输入名称时,就会创建文件并且行在那里,但是当我使用 display 方法时,它会吐出那个错误,我不确定我的问题出在哪里,而且我对 Java 有点陌生。我在另一个班级有一个方法来保存行,但我认为这不是我的问题所在,而且我有点卡住了,任何帮助将不胜感激。

    package X;

    import java.util.Scanner;
    import java.io.*;

    public class FileDisplay {
        String filename;

        public FileDisplay(String name) {name = filename;}

        public void display() throws IOException {
            File file = new File(filename);
            Scanner inputFile = new Scanner(file);
            while (inputFile.hasNext()) {
                String str = inputFile.nextLine();
                System.out.println(str);
            }
            inputFile.close();
        }


    }

我运行了代码,每次它吐出这个错误:

Exception in thread "main" java.lang.NullPointerException
    at java.base/java.io.File.<init>(File.java:276)
    at ES1036a.Lab6.FileDisplay.display(FileDisplay.java:12)
    at ES1036a.Lab6.FilesDemo.main(FilesDemo.java:27)

这是演示类:

    package X;

    import java.util.Scanner;
    import java.io.*;
    public class FilesDemo {
        public static void main(String[] args) throws IOException {
            String filename = "lines.txt";

            Scanner keyboard = new Scanner(System.in);
            System.out.println("What's the filename?");

            filename = keyboard.nextLine();

            FileSave FilesDemo = new FileSave(filename);
            FilesDemo.save("1-Lorem ipsum dolor sit amet\n" +
                    "2-Consectetuer adipiscing elit\n" +
                    "3-Sed diam nonummy nibh euismod tincidunt\n" +
                    "4-Ut wisi enim ad minim veniam\n" +
                    "5-Quis nostrud exerci tation ullamcorper\n" +
                    "6-Suscipit lobortis nisl ut aliquip ex ea commodo consequat\n" +
                    "7-Duis autem vel eum iriure dolor in hendrerit\n" +
                    "8-Vel illum dolore eu feugiat nulla facilisis at vero eros");


            FileDisplay FilesDemo2 = new FileDisplay(filename);

            FilesDemo2.display();
        }
    }

标签: java

解决方案


在 FileDisplay 的构造函数中,您未分配名为“filenamed”的属性,以这种方式更正它:

public FileDisplay(String name) {
    /*  wrong
    the parameter String "name" is reassigned but you need
    to assing the class attribute "filneame", this line is wrong:
    name = filename;
    */

    // correct 
    filename = name;
}

推荐阅读