在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
为空。请看我的答案,了解构建它的不同方式。它现在正在工作,但现在必须解决一些鼠标侦听器问题,谢谢