java BufferedReader 和 Writer 无法按预期工作

标签 java file-io bufferedreader bufferedwriter

我想做的是读取 mnist 训练文件,并用十一位数字表示它的第一个数字,并保持其他相同。

所以 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();
    }
}
} 

g、cnt、cnt2是我用于调试的数字,但我在这里没有发现任何问题;它自然地将每行 785 个字母转换为新的 795 个字母行。

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();
    }

}
}

但是发生的事情是,当我运行第二个代码时,它不应该打印任何内容,打印结果并说我的第 59994 行数据仅由 311 个字母组成。但从我的第一个代码中,我确认我的第 59994 行有 795 个字母。我不知道这是怎么回事。

我还尝试使用 FileWriter 和 FileReader 而不是 BufferedWriter & Reader,但它没有解决问题。有人可以告诉我发生了什么事以及如何解决这个问题吗?

最佳答案

问题是我没有关闭读取器/写入器。不知道这最终会导致严重错误。

关于java BufferedReader 和 Writer 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59117213/

相关文章:

java - 验证是否可以与 Controller 中增强的参数一起使用?

java - 在 Java 中,++x 是否比 x++ 更高效?

c# - 如何生成通过 FileStream 写入的数据已在磁盘上的通知?

c++ - 为什么 CreateFile 无法通过网络共享打开文件?

python - 使用 Python 将列表写入文件,使用换行符

java - 数据库如何通过 Hibernate 与 jpa 注解的 pojo 类交互?

java - hibernate 给出两行相同的行而不是两行不同的行

java - 通过 Arraylist 进行搜索和排序

Java 在 BufferedReader.read for char 之后抛出 NumberFormatException 错误

java - BufferedReader指针