繁体   English   中英

读取多个文件Java

[英]Reading Multiple Files Java

我是新来的,在尝试读取文件时遇到问题。

这是我的代码

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 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.stateBoard.STATE.LEVELx的值? 这将准确告诉您为什么您的IF全部为假。 或者只是设置一个断点并检查值。

还可以尝试将IF中的==更改为.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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM