在java.io.FileNotFoundException中拒绝访问

时间:2016-05-16 02:06:18

标签: java text-files java.util.scanner

如果有帮助,我正在使用Eclipse。

我必须使用Scanner访问java中的文件,并且我正在使用它们来生成对象。一些对象依赖于其他对象,程序应该为这些对象调用适当的“构建器”方法。

例如,我有一个Effect类,由WeaponArtifact类使用,由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方法执行类似的调用来创建新对象,但这是唯一导致任何问题的方法。

作为参考,这里是正在使用的txt文件的示例(括号中的信息详细说明了数据应该用于哪个变量):

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)

这个问题有解决方案吗?

2 个答案:

答案 0 :(得分:1)

如果错误确实是这个错误:java.io.FileNotFoundException: .\doc\Builders (Access is denied)那么您似乎正在尝试打开目录,这意味着buildEnemy未使用有效文件名调用

答案 1 :(得分:0)

如果filename参数为空字符串,则可能无法访问该文件。

检查您可能无权读取该文件的文件的权限,作为您尝试读取该文件的用户。