2016-05-16 32 views
0

Ich benutze Eclipse, wenn das hilft.Zugriff verweigert in java.io.FileNotFoundException

Ich muss auf Dateien in Java mit einem Scanner zugreifen, und ich verwende sie, um Objekte zu generieren. Einige Objekte haben Abhängigkeiten von anderen Objekten und das Programm soll die entsprechende "builder" -Methode für diese Objekte aufrufen.

Zum Beispiel, ich habe eine Effect Klasse, die von der Weapon und Artifact Klasse verwendet wird, die durch die Enemy Klasse verwendet werden.

Die Verfahren für diese zu erzeugen sind effectBuilder(String fileName), weaponBuilder(String fileName) usw. genannt Es gibt keine Probleme mit jedem dieses Verfahren aber die enemyBuilder(String fileName) Methode, die mir einen java.io.FileNotFoundException: .\doc\Builders (Access is denied) Fehler gibt. Der Speicherort der Datei enthält die Textdateien für diese Methoden.

Die enemyBuilder Methode ist wie folgt:

Klasse:

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); 
} 

Die anderen builder Methoden tun ähnliche Anrufe zu anderen builder Methoden, um neue Objekte zu erstellen, aber dies ist die einzige, irgendwelche Probleme zu verursachen.

Als Referenz ist hier eine Probe der txt-Datei, die (Die Angaben in Klammern Details, welche Variable die Daten verwendet werden soll) verwendet wird:

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) 

Gibt es eine Lösung für dieses Problem?

Antwort

0

Wenn der Fehler wirklich diese: java.io.FileNotFoundException: .\doc\Builders (Access is denied) dann scheint es, Sie versuchen, ein Verzeichnis zu öffnen, die buildEnemy bedeutet, ist nicht mit einem gültigen Dateinamen genannt

+0

Aus dem Rest der Nachricht wird es richtig stecken, wenn es versucht, eine der anderen 'build' Methoden zum ersten Mal mit' g' aufzurufen. Gibt es irgendetwas, das dazu führen würde, dass es die falsche Zeile liest? – GoonyKnightMan

+0

Der Fehler gefunden, ich denke, die Aufrufe von 'nextInt()' verursachten ein seltsames Verhalten bei den folgenden 'nextLine()' -Aufrufen, indem sie auf 'next()' umschalteten den Fehler lösten und die Methode normal ausführen ließ. Es wurde versucht, die Methode 'build' mit einer leeren Zeichenfolge aufzurufen, an der sich das Problem befand. – GoonyKnightMan

+0

@GoonyKnightMan Nein. Das Problem war, dass Sie die Datei nicht öffnen konnten. Der 'Scanner' konnte nicht erstellt werden. Sie hätten unmöglich 'next()' oder 'nextInt()' ausführen können. – EJP

0

Ist Dateiname Parameter leere Zeichenfolge dann kann Datei nicht zugegriffen werden .

Überprüfen Sie die Berechtigungen der Datei, die Sie nicht berechtigt sind, die Datei als der Benutzer zu lesen, die Sie versuchen, die Datei zu lesen.

Verwandte Themen