簡體   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