Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么';我的程序没有读取使用同一程序创建的文件吗?_Java_File_File Io - Fatal编程技术网

Java 为什么';我的程序没有读取使用同一程序创建的文件吗?

Java 为什么';我的程序没有读取使用同一程序创建的文件吗?,java,file,file-io,Java,File,File Io,我正在尝试创建一个程序,该程序生成一个随机生成数字的文件,我希望该程序从文件中读取这些数字并对其进行分析。如果随机生成的数字不等于0,程序应继续生成数字,但如果它等于0,则程序将停止。然而,我的程序似乎没有读取这些数字 我试着把outFile.close()和infle.close()在两个不同的地方查看是否可以修复任何问题,但似乎没有成功。我试着用笔和纸来追踪我的代码,但没有发现任何错误。可能是我放置的outFile.close()和infle.close(),但我找不到有什么问题 impor

我正在尝试创建一个程序,该程序生成一个随机生成数字的文件,我希望该程序从文件中读取这些数字并对其进行分析。如果随机生成的数字不等于0,程序应继续生成数字,但如果它等于0,则程序将停止。然而,我的程序似乎没有读取这些数字

我试着把
outFile.close()
infle.close()
在两个不同的地方查看是否可以修复任何问题,但似乎没有成功。我试着用笔和纸来追踪我的代码,但没有发现任何错误。可能是我放置的
outFile.close()
infle.close(),但我找不到有什么问题

import java.util.*;
import java.io.*;

public class squirrel {

public static void main(String[] args) throws IOException{
    Scanner in = new Scanner(System.in);
    PrintWriter outFile = new PrintWriter(new File("squirrel.txt"));
    Scanner inFile =  new Scanner(new File("squirrel.txt"));
    Random rand = new Random();
    int squirrelNum;
    int foxSquirrel = 0;
    int squirrelsSeen = 0;
    int trials = 0;

    System.out.println("Welcome to the Fox Squirrel Simulator\n");
    System.out.println("How many trials should be simulated?");
    System.out.println("Enter a value greater than 1000: ");
    trials = in.nextInt();

    while(trials <= 1000)
    {
        System.out.println("Please try again. Enter a value greater than 1000: ");
        trials = in.nextInt();
    }

    for(int i = 0; i <= trials; i ++)
    {
        squirrelNum = rand.nextInt(10);
        outFile.println(squirrelNum);

        while(inFile.hasNextInt())
        {
            int token = inFile.nextInt();

            while(token != 0)
            {

                squirrelsSeen ++;
            }

            if(token == 0)
            {
                foxSquirrel ++;
                squirrelsSeen ++;
            }
            outFile.close();
        }


        System.out.println("squirrelsSeen: " + squirrelsSeen);
        System.out.println("foxSquirrel: " + foxSquirrel);
    }


    inFile.close();
    System.out.println("\nsimulating trials now... one moment please...\n");
    System.out.println("The results!");
    System.out.println("The average number of squirrels until spotting a Fox Squirrel at the city park is: " + (((double)foxSquirrel / squirrelsSeen) * 100));



 }

}
import java.util.*;
导入java.io.*;
公营松鼠{
公共静态void main(字符串[]args)引发IOException{
扫描仪输入=新扫描仪(系统输入);
PrintWriter outFile=新的PrintWriter(新文件(“squirrel.txt”);
Scanner infle=新扫描仪(新文件(“squirrel.txt”);
Random rand=新的Random();
int-squirrenum;
int-foxSquirrel=0;
int-sseen=0;
int试验=0;
System.out.println(“欢迎使用狐狸松鼠模拟器”);
System.out.println(“应该模拟多少次试验?”);
System.out.println(“输入大于1000的值:”);
试验=in.nextInt();

而(试验以下是如何使用扫描仪完成的

File file = new File("squirrel.txt");

    try {

        Scanner sc = new Scanner(file);

        while (sc.hasNextLine()) {
            int i = sc.nextInt();
            System.out.println(i);
        }
        sc.close();
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
正如您所说。您将.close()放在代码的while循环中。尝试将其放在外部。

新建PrintWriter(新文件(“squirrel.txt”)
会立即删除该文件。从:

如果文件存在,那么它将被截断为零大小;否则,将创建一个新文件

不可能同时读取和写入同一个文件。(实际上,有些情况下是可能的,但在这里不适用。)


在完成文件读取并调用
infle.close()之前,不要创建PrintWriter
。或者,写入另一个文件,然后完成后,将其重命名以匹配原始文件。

您确定infle和outFile指向同一个文件,可能是同名的两个文件吗?不确定这是如何工作的,因为我以前从未使用过类似的文件。脱离主题但您的代码对我来说毫无意义,为什么要写一行然后直接读取文件?逻辑上的解决方案是完全跳过该文件。是的,我确信他们指向同一个文件。这是我学校作业的一部分。我必须创建一个文件,然后从同一个文件读取数据。“是的,我确信他们指向同一个文件。”如果您无法读取该文件,那么您是如何确认此声明的?可能您需要在读取之前关闭或至少刷新该文件我们还没有学会如何刷新。我认为主要问题是我将outFile.close()放置在何处;但是我不确定它应该放在哪里。只是出于好奇,你如何在不使用try-and-catch的情况下创建同一个程序,完全依靠Scanner?这可能吗?是的,在main之后放置IOException,就像你已经拥有的一样。这样应该可以了。顺便说一句,如果你放置outfile.close()在for循环之外,它确实会将数字写入文件。我尝试将其置于for循环之外,但我的变量似乎不会递增。请再次澄清您试图执行的操作。生成1000个随机数,将其写入文件,如果增量为0,则会将其写入文件?是的,您的PrintWriter创建一个大小为零的文件。您的PrintWriter创建了一个空文件。没有可读取的内容。那么这是否意味着outFile.println(squirreNum);不将随机数打印到输出文件?infle和outFile都有自己的文件位置。infle不知道输出文件已打印到文件中。不支持对同一文件进行读写操作。即使让它正常工作,也很幸运,在其他运行和在其他计算机上运行时可能会失败。