我试图做的是读取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();
}
}
}
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 - java BufferedReader和Writer不能按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59117213/