Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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 - Fatal编程技术网

Java 输入/输出运行时错误

Java 输入/输出运行时错误,java,Java,我要为我的面向对象编程课程编写三个程序,所有程序都涉及文件输入/输出,每个程序都不包含编译错误,但它们在运行时并没有执行它们应该执行的操作(它们不会像应该执行的那样打印到输出文件) 我知道正在读取输入文件并将其保存在正确的位置,因为Eclipse将指示是否存在这两种情况 此外,据我所知,我没有犯过任何涉及不包括关闭读/写文件的异常的常见错误 我在这里附上我的第一个I/o分配,希望其他文件也有类似的错误,只要我能找出这个文件的错误,我就可以修复 import java.io.*; public

我要为我的面向对象编程课程编写三个程序,所有程序都涉及文件输入/输出,每个程序都不包含编译错误,但它们在运行时并没有执行它们应该执行的操作(它们不会像应该执行的那样打印到输出文件)

我知道正在读取输入文件并将其保存在正确的位置,因为Eclipse将指示是否存在这两种情况

此外,据我所知,我没有犯过任何涉及不包括关闭读/写文件的异常的常见错误

我在这里附上我的第一个I/o分配,希望其他文件也有类似的错误,只要我能找出这个文件的错误,我就可以修复

import java.io.*;

public class GreenK4_Lab8 {
public static void main(String[] args) throws IOException {
    int[] numbers = new int[countLines()];
    int i = 0;
    for(i = 0; i < numbers.length; i++) {
        numbers[i] = readValues(i);
    }
    printOdd(numbers);
}


public static int countLines() throws IOException {
    BufferedReader inFile = new BufferedReader(
            new FileReader( "Lab8_TestFile.txt" ) );

    int lineNumber = 1;
    String nextLine = inFile.readLine();
    while( nextLine != null ) {
        lineNumber ++;
    }
    inFile.close();
    return lineNumber;    
}

public static int readValues(int number) throws IOException {
    BufferedReader inFile = new BufferedReader(
            new FileReader( "Lab8_TestFile.txt" ) );

    int value = 0;
    for(int i = 0; i < number; i++) {
        String nextLine = inFile.readLine();
        value = Integer.parseInt( nextLine );
    }
    inFile.close();
    return value;
}

public static void printOdd(int[] array) throws IOException {
    PrintWriter outFile = new PrintWriter( "results.out" );
    for(int i = 0; i < array.length; i++) {
        int value = array[i];
        if( value % 2 != 0)
            outFile.println( value );
    }

    outFile.close();
}
}

正如其他评论者所指出的,将countLines函数中的代码从

    String nextLine = inFile.readLine();
    while( nextLine != null ) {
        lineNumber ++;
    }


通过此更改,您的程序可以按预期工作。

您的代码有多处错误。让我们从头开始:您的
countLines
方法无法按预期工作,将创建一个无限循环,因为您的while条件永远不会被计算为
false
(除非您的文件为空):

您可能需要检查检索文件行数的更快、性能更好的版本

此外,您的
readValues
函数为它要读取的每一行打开文件,读取文件直到该行,然后再次关闭文件->坏的。您应该做的是:

public static void readValues(int[] contentsOfFile) throws IOException {
    BufferedReader inFile = new BufferedReader(new FileReader("Lab8_TestFile.txt"));

    for(int i = 0; i < contentsOfFile.length; i++) {
        String nextLine = inFile.readLine();
        contentsOfFile[i] = Integer.parseInt( nextLine );
    }

    inFile.close();
}
这样,您只需解析文件一次即可读取值。如果需要返回int[],请查看以了解如何从给定的数据结构中提取int[]

您的主要功能可能会产生如下结果:

public static void main(String[] args) throws IOException {
    int numberOfLines = countLines(); // technically no longer needed.
    int[] intContents = convertIntegers(readValues());
    printOdd(intContents);
}

请删除所有无用的评论。用
Declare integer注释
int i=0
,i并给它赋值0
是完全无用的,会弄乱代码。“它们不会像预期的那样打印到输出文件”。接下来会发生什么?
nextLine!=空值
条件永远不会改变-您应该使用类似于
while((nextLine=infle.readLine())!=null)
或简单的
while(infle.readLine()!=null)
JB Nizet:无法同意您更多的评论。然而,不幸的是,这正是我的教授想要的。他说我们的评论应该逐行描述代码的功能。如果我在这里做了其他的事情,我会因为他称之为“预先加载我的评论”而失去分数。Tichodroma:它根本不会创建输出文件。rzysia:事实上,下一条线的条件已经改变了。实际上,infie.readLine方法的功能与您刚才描述的类似。您只是看不到代码,因为该方法是从Java库调用的。当我将该方法插入while循环时,我可能会尝试查看程序执行的操作。也许我误解了readLine方法的工作原理。我对此表示怀疑,因为我记得我们的教授给了我们该部分的代码,但值得一试。
// String nextLine = inFile.readLine();
// while(nextLine != null) {
while (inFile.readLine() != null) {
    lineNumber++;
}
public static void readValues(int[] contentsOfFile) throws IOException {
    BufferedReader inFile = new BufferedReader(new FileReader("Lab8_TestFile.txt"));

    for(int i = 0; i < contentsOfFile.length; i++) {
        String nextLine = inFile.readLine();
        contentsOfFile[i] = Integer.parseInt( nextLine );
    }

    inFile.close();
}
public static ArrayList<Integer> readValues() throws IOException {
    BufferedReader inFile = new BufferedReader(new FileReader("Lab8_TestFile.txt"));
    ArrayList<Integer> integerContents = new ArrayList<>();

    String nextLine = null;
    while ((nextLine = inFile.readLine()) != null) {
        integerContents.add(Integer.parseInt(nextLine));
    }

    inFile.close();
    return integerContents;
}
public static void main(String[] args) throws IOException {
    int numberOfLines = countLines(); // technically no longer needed.
    int[] intContents = convertIntegers(readValues());
    printOdd(intContents);
}