java BufferedReader&;Writer不';I don’我没有按预期工作

java BufferedReader&;Writer不';I don’我没有按预期工作,java,file-io,bufferedreader,bufferedwriter,Java,File Io,Bufferedreader,Bufferedwriter,我想做的是读一个mnist列车文件,把它的第一个数字表示成11位数字,其他数字保持不变 所以3,1,4,6。。。到,0,0,0,1,0,0,0,0,0,0,1,4,6。。。(第一位数字为“”,总共11位) 我认为这是一件容易的工作,但事实并非如此 import java.io.*; public class T { public static void main(String[] args){ File file = new File("./src/dataset/mnist_train

我想做的是读一个mnist列车文件,把它的第一个数字表示成11位数字,其他数字保持不变

所以3,1,4,6。。。到,0,0,0,1,0,0,0,0,0,0,1,4,6。。。(第一位数字为“”,总共11位)

我认为这是一件容易的工作,但事实并非如此

import java.io.*;
public class T {
public static void main(String[] args){
    File file = new File("./src/dataset/mnist_train.csv");
    File wfile = new File("./src/dataset/conv_mnist_train2.txt");

    try{
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        BufferedWriter fileWriter = new BufferedWriter(new FileWriter(wfile));
        String line;
        String[] numbers;
        int g = 0, cnt = 0, cnt2 = 0;

        while ((line = bufferedReader.readLine()) != null) {
            cnt2++;
            numbers = line.split(",");
            for(String i : numbers){
                if(g == 0){
                    for(int j=0; j<10; ++j) {
                        if(j == Integer.parseInt(i)) fileWriter.write("," + 1);
                        else{ fileWriter.write("," + 0); cnt++;}
                    }
                    g++;
                }
                else {fileWriter.write("," +i); cnt++;}
            }
            fileWriter.newLine();

            System.out.println(numbers.length + " " + cnt + " " + cnt2);
            g = 0; cnt = 0;
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}
} 
但发生的事情是,当我运行第二个代码(不应该打印任何内容)时,打印了结果,并说我的59994行数据仅由311个字母组成。但从我的第一个代码,我确认我的59994行有795个字母。我不知道这里发生了什么


我还尝试使用FileWriter和FileReader代替BufferedWriter和Reader,但并没有解决问题。有人能告诉我发生了什么,以及如何解决这个问题吗?

问题是我没有关闭读写器。我不知道这会导致严重的错误。

你永远不会关闭你的读者和作者。学习使用“尝试使用资源”语句:谢谢。我不知道不关闭读写器会导致这样的严重后果。根据定义,缓冲写器会将您写入的内容缓冲到内存中。当缓冲区已满或关闭(或刷新)时,它会写入文件。如果从未关闭,则会丢失部分文件。无论如何,资源都必须关闭,因为它们是稀缺的。如果您忘记关闭数百个文件资源,您的操作系统将没有足够的可用文件描述符。
import java.io.*;

public class Tes {
public static void main(String[] args){
    File file = new File("./src/dataset/conv_mnist_train2.txt");

    try{
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        String line;
        int g = 0;

        while ((line = bufferedReader.readLine()) != null) {
            g++;
            String[] N = line.split(",");
            if(N.length != 795){
                System.out.println(N.length + " " + g);
                for(String i : N) System.out.print(i + " ");
                System.out.println();
            }
        }
    }catch(Exception e){
        e.printStackTrace();
    }

}
}