出现问题的代码
import java.io.*;
/**
* @ClassName WriteAndReadData
* @Author OwemShu
* @Description
* @Date 2021/11/19 9:29
**/
public class WriteAndReadData {
public static void main(String[] args) {
String path = "C:\\Users\\shuhe\\Desktop\\Profession\\Java\\Lab\\lab13\\src\\com\\shuhx\\Num7\\rw.txt";
try (BufferedWriter bw = new BufferedWriter((new FileWriter(path)))) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
int x = (int)(Math.random()*100);
bw.write(x + " "); //不能直接用x,因为这里的write方法写入的是字符流, 另外如果开头不加" ",读的时候会忽略开头第一个字节
}
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
while (br.read() != -1) {
String str = br.readLine();
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个代码的作用是随机生成一个0~100的整数组成的矩阵写入文件并读出
这里我使用了BufferedWriter,但在调试的时候发现了一个问题,即无法读取每一行第一个字符
而文件内容是这样的
93 74 14 45 44 56 14 95 13 96
6 77 93 42 87 29 63 69 29 39
96 54 24 21 59 71 37 81 57 16
99 51 86 43 72 99 96 91 95 51
52 28 62 52 70 79 94 74 31 18
16 4 47 79 81 41 23 66 80 33
79 76 97 19 21 47 98 11 61 39
35 40 25 55 1 31 56 52 65 64
59 62 98 50 12 97 41 42 85 4
54 65 32 77 7 46 9 53 83 34
debug查看(注意这里的数据与上面有改变)
经过思考后发现在while (br.read() != -1)
部分里由于已经对这一行的第一个字符进行过读取和判断了,因此在while内实际上的readLine()就会返回剩下的字符,因此出现每一行少一个开头字符的情况
解决办法
for (int i = 0; i < 10; i++){
String str = br.readLine();
System.out.println(str);
}
我将while循环改为for定长循环就完美的解决了这个问题
8 24 90 45 56 16 56 71 50 45
0 15 51 1 37 87 26 96 90 80
50 52 54 13 9 27 53 4 34 36
51 95 23 97 54 56 94 35 73 85
97 31 95 7 72 28 25 13 48 54
51 49 15 66 53 87 70 68 74 34
9 99 60 26 84 58 95 97 67 62
89 15 51 34 91 7 6 37 56 31
76 63 75 71 8 60 3 76 39 29
24 78 63 22 12 17 35 38 78 58