Я использую Eclipse, если это помогает.Доступ запрещен в java.io.FileNotFoundException
Мне нужно получить доступ к файлам в java с помощью сканера, и я использую их для создания объектов. Некоторые объекты имеют зависимости от других объектов, и программа должна вызывать соответствующий метод «строитель» для этих объектов.
Например, у меня есть Effect
класс, который используется в Weapon
и Artifact
класса, которые используются в Enemy
класса.
Методы генерации их называют effectBuilder(String fileName)
, weaponBuilder(String fileName)
и т.д. Там нет никаких проблем с каким-либо из этих методов, но метод enemyBuilder(String fileName)
, который дает мне ошибку java.io.FileNotFoundException: .\doc\Builders (Access is denied)
. Расположение файла - это то, где я храню текстовые файлы для этих методов.
Метод enemyBuilder выглядит следующим образом:
Класс:
public static Enemy buildEnemy(String fileName)
{
Scanner sc;
//creates Scanner, prints error and returns null if file is not found
try {
sc = new Scanner(new File("./doc/Builders/"+fileName));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
//values are put into constructor at the end of the method.
String n = sc.nextLine();
int h = sc.nextInt();
int d = sc.nextInt();
int lo = sc.nextInt();
int hi = sc.nextInt();
String g = sc.nextLine();
ArrayList<Weapon> weps = new ArrayList<Weapon>();
while(!g.equals("a") && sc.hasNextLine()){
weps.add(Builder.buildWeapon(g));
g = sc.nextLine();
}
ArrayList<Artifact> facs = new ArrayList<Artifact>();
while(sc.hasNextLine()){
facs.add(Builder.buildArtifact(sc.nextLine()));
}
sc.close();
//converting for constructor purposes
Weapon[] warr = new Weapon[weps.size()];
int x = 0;
for(Weapon e : weps)
warr[x++] = e;
Artifact[] aarr = new Artifact[facs.size()];
x = 0;
for(Artifact e : facs)
aarr[x++] = e;
return new Enemy(n, h, d, lo, hi, warr, aarr);
}
Других builder
методы делают подобные вызовы в другие builder
метод для создания новых объектов, но это только один вызывает какие-либо проблемы.
Для справки, вот пример из текстового файла, который используется (информация в деталях скобки, что переменные данные должны быть использованы для):
Warrior (should be n)
12 (should be h)
10 (should be d)
15 (should be lo)
30 (should be hi)
battleaxe.txt (first instance of g in 1st loop)
longsword.txt (second instance)
a (signifies the computer to move to next while loop)
battlemedallion.txt (first instance of g in 2nd loop)
chestplate.txt (second instance)
Есть ли решение этой проблемы?
Из остальной части сообщения он застревает прямо, когда он пытается вызвать один из методов 'build' с' g' в первый раз. Есть ли что-то, что могло бы заставить его читать неправильную строку? – GoonyKnightMan
Обнаружена ошибка, я думаю, что вызовы 'nextInt()' вызывали какое-то странное поведение со следующими вызовами nextLine() ', переключая их на' next() 'очищали ошибку и позволяли методу работать нормально. Он пытался вызвать метод 'build' с пустой строкой, в которой была проблема. – GoonyKnightMan
@GoonyKnightMan No. Проблема в том, что вы не могли открыть файл. Не удалось создать «Сканер». Вы не могли бы выполнить либо 'next()', либо 'nextInt()'. – EJP