静态方法之间的Java扫描器指针问题

静态方法之间的Java扫描器指针问题,java,java.util.scanner,Java,Java.util.scanner,我的扫描仪对象有问题。如果我将扫描器传递到一个静态方法,扫描器将无法读取主函数中提供的文件。当我将文件对象传递给scanner,然后将scanner传递给Add函数时,它不会将文件内容输出到控制台。但是,如果我注释掉Add函数中的scanner部分,scanner的读数就会很好。这让我相信扫描仪可以看到文件,但不能从中读取。我的问题是如何在Add函数中再次读取文件 public static void main(String[] args) throws IOException { Fi

我的扫描仪对象有问题。如果我将扫描器传递到一个静态方法,扫描器将无法读取主函数中提供的文件。当我将文件对象传递给scanner,然后将scanner传递给Add函数时,它不会将文件内容输出到控制台。但是,如果我注释掉Add函数中的scanner部分,scanner的读数就会很好。这让我相信扫描仪可以看到文件,但不能从中读取。我的问题是如何在Add函数中再次读取文件

public static void main(String[] args) throws IOException
{
    File file = new File("vinceandphil.txt");

    if (file.createNewFile())
    {
        System.out.println("New file was created");
    }
    else {
        System.out.println("File already exists");
    }
    Scanner sc = new Scanner(file);

    FileWriter writer = new FileWriter(file);
    writer.write("Test data\n");
    Add(file, writer, sc);
    writer.close();

    while (sc.hasNextLine())
    {
        System.out.println(sc.nextLine());
    }

    sc.close();

}

public static void Add(File f, FileWriter w, Scanner scanner) throws IOException
{

    if (f.exists())
    {
        w.write("Got em coach\n");
        w.write("We need more info\n");
        w.write("Come again\n");
    }

    while (scanner.hasNextLine())
    {
        System.out.println(scanner.nextLine());
    }

}

你不能那样做。通过
nextLine()
读取一行后,该行将被“丢弃”,指针将指向下一行

要从文件的开头重新开始,您必须实例化另一个
扫描仪

final Scanner yourNewScanner = new Scanner(file);
如果您想要一种在文件中移动的方法,请查看
RandomAccessFile


您指出您的
扫描仪没有打印任何内容。
这是因为在请求
扫描仪
读取之前,您没有关闭文件流

if (f.exists())
{
    w.write("Got em coach\n");
    w.write("We need more info\n");
    w.write("Come again\n");

    // Adding this call flushes and closes the data stream.
    w.close();
}

这是有道理的,是的,但是使用我现在的设置,即使我只从Add()读取文件,它仍然没有打印任何内容。好像档案里什么都没有。就好像当我将扫描器传递到Add()时,扫描器读取文件的能力消失了一样。@VincentTomie查看更新的答案。我解释了发生了什么。是的,你刚刚回答了我的核心问题,为什么没有扫描。非常感谢。