找不到Java I/O文件



当前正在尝试编写一个程序,从文件中获取输入并将其存储在数组中。但是,每当我尝试运行程序时,都找不到文件(尽管file.exists()和file.canRead()返回true)。

这是我的代码:

    public void getData (String fileName) throws FileNotFoundException
{
    File file = new File (fileName);
    System.out.println(file.exists());
    System.out.println(file.canRead());
    System.out.println(file.getPath());
    Scanner fileScanner = new Scanner (new FileReader (file));
    int entryCount = 0;     // Store number of entries in file
    // Count number of entries in file
    while (fileScanner.nextLine() != null)
    {
        entryCount++;
    }
    dirArray = new Entry[entryCount];   //Create array large enough for entries
    System.out.println(entryCount);
}
public static void main(String[] args)
{
    ArrayDirectory testDirectory = new ArrayDirectory();

    try
    {
        testDirectory.getData("c://example.txt");
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
}

(在当前状态下,该方法仅用于计算行数并创建阵列)

控制台输出如下:true true c:\example.txt

该程序似乎在实例化扫描仪的行上抛出了一个"FileNotFoundException"。

我在调试时检查"file"对象时注意到的一件事是,尽管它的"path"变量的值为"c:\example.txt",但它的"filePath"值为null。不确定这是否与问题有关

编辑:在Brendan Long的回答之后,我更新了"捕获"块。堆栈跟踪如下所示:

java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at assignment2.ArrayDirectory.getData(ArrayDirectory.java:138)
    at assignment2.ArrayDirectory.main(ArrayDirectory.java:193)

扫描仪似乎无法识别文件,因此无法找到行

此代码可能无法执行您想要的操作:

try
{
    testDirectory.getData("c://example.txt");
}
catch (Exception ex)
{
    new FileNotFoundException("File not found");
}

如果捕捉到任何异常,则运行FileNotFoundException的构造函数,然后将其丢弃。尝试这样做:

try
{
    testDirectory.getData("c://example.txt");
}
catch (Exception ex)
{
    ex.printStackTrace();
}

根据Scanner的javadoc,nextLine()在没有更多输入时抛出此异常。您的程序似乎希望它返回null,但现在它就是这样工作的(不像BufferedReader会在输入结束时返回null)。使用hasNextLine以确保在使用nextLine之前还有另一行。

相关内容

  • 没有找到相关文章

最新更新