在Java中读取多个文件

在Java中读取多个文件,java,file,Java,File,我是新来的,我在读文件时遇到了问题 这是我的密码 public void openFile() { try { if(Board.state == Board.STATE.LEVEL1) { scan = new Scanner(new File("D://OOP Photos//Map.txt")); } } catch(FileNotFoundException e) {

我是新来的,我在读文件时遇到了问题

这是我的密码

public void openFile()
{
    try
    {
        if(Board.state == Board.STATE.LEVEL1)
        {
            scan = new Scanner(new File("D://OOP Photos//Map.txt"));
        }
    }
    catch(FileNotFoundException e)
    {
        e.printStackTrace();
    }
    try
    {
        if(Board.state == Board.STATE.LEVEL2)
        {
            scan = new Scanner(new File("D://OOP Photos//Map1.txt"));
        }
    }
    catch(Exception e)
    {
        System.out.println("Error loading MAP !!! ");
    }

    try
    {
        if(Board.state == Board.STATE.LEVEL3)
        {
            scan = new Scanner(new File("D://OOP Photos//Map2.txt"));
        }
    }
    catch(Exception e)
    {
        System.out.println("Error loading MAP !!! ");
    }

}
如果我注释掉If语句,它是可以的,但是如果我将它保留在那里,它将在下一个方法中抛出
NullPointerException

public void readFile()
{
    while(scan.hasNext())
    {
        for(int i = 0; i < 10; i++)
        {
            if(scan.hasNext())
            {
                Map[i] = scan.next();
            }
        }
    }
}
public void readFile()
{
while(scan.hasNext())
{
对于(int i=0;i<10;i++)
{
if(scan.hasNext())
{
Map[i]=scan.next();
}
}
}
}
你能帮我吗


谢谢:)

这样做:

public static void main(String args[]) {
    String filename;
    if(Board.state == Board.STATE.LEVEL1) {
        filename = "D://OOP Photos//Map1.txt";
    }
    else if (Board.state == Board.STATE.LEVEL2) {
        filename = "D://OOP Photos//Map2.txt";
    }
    else if (Board.state == Board.STATE.LEVEL3) {
        filename = "D://OOP Photos//Map3.txt";
    }
    readFile(filename);
}

public void readFile(String filename) { 
    try {
        Scanner scan = new Scanner(new File(filename));

        int i = 0;
        while(scan.hasNext()) {
            Map[i] = scan.next();
            i++;
        }
    }
    catch(FileNotFoundException e) {
        System.out.println("Error loading MAP !!! ");
    }
}

在每个IF语句之前,只需打印出
Board.state
Board.state.LEVELx
?这会告诉你为什么你的假设都是假的。或者只是设置一个断点并检查值


另外,请尝试将IFs中的
==
更改为
.equals()

您的应用程序逻辑让我感到困惑。为什么不让jsut用一个try/catch块,一个
Scanner scan=new Scanner(new File(filePath))

创建一个简单的公共Scanner openFile(String filePath)方法呢

public static class Board {

    // I'm assuming this is what's happening?
    public static State state = State.LEVEL1;

    public enum State {

        LEVEL1("Map.txt"), LEVEL2("Map1.txt"), LEVEL3("Map2.txt");

        private final String fileName;

        private State(String fileName) {
            this.fileName = fileName;
        }

        public String getFileName() {
            return fileName;
        }
    }
};

public void openFile() {

    if (Board.state == null)
        throw new RuntimeException("board state not set");

    File file = new File("D:/OOP Photos/", Board.state.getFileName());

    try (Scanner scan = new Scanner(file)) {

        // do the scanning

    } catch (FileNotFoundException fnfe) {
        // handle file not found
    } catch (Exception e) {
        // handle other errors
    }
}

扫描很可能为空,Board.state的值是多少(为什么是静态的?)state是来自类Board的枚举,它帮助我保持游戏的状态。我正在尝试制作一个迷宫游戏,这些是我的地图,在一次尝试中捕获所有内容,将ifs组合成一个独占的if else if-你会很快看到问题。尝试过但相同的问题出现了…没有说它会被修复,但你应该能够看到为什么
scan
为空。请看我的答案,了解构建它的不同方式。它现在正在工作,但现在必须解决一些鼠标侦听器问题,谢谢