这里用do...while循环不合适
do {
temp = input.read(); // 读取了一个字节
data[foot++] = (byte) temp; // 保存读取进来的单个字节
} while (temp != -1);
do...while循环是先执行循环体再判断终止条件。
在这个程序里,当读到文件最后一个字符时,do{}语句中取到temp='g',将其写入到data[]数组中,然后判断temp是否为-1,而此时temp='g',所以终止条件不成立,do{}语句再次执行,这时因为已经到达文件结尾处,所以temp=-1,而且程序将这个-1值写到data数组中的,而字符集编码无法识别-1,所以就输出了个问号?
应该使用while(){}语句,如下修改后就没有?了:
import java.io.FileInputStream;
import java.io.InputStream;
public class TestDemo2 {
public static void main(String[] args) throws Exception {
File file = new File("F:" + File.separator + "test"
+ File.separator + "demo.txt"); // 定义文件路径
if (file.exists()) { // 文件存在则可以读取
InputStream input = new FileInputStream(file); //实例化读入流
byte data[] = new byte[1024]; // 假设要读的长度是1024
int foot = 0; // 操作data数组的脚标
int temp = 0;
while((temp=input.read())!=-1){
data[foot++] = (byte) temp; // 保存读取进来的单个字节
}
input.close();
System.out.println("读取的数据是:【" + new String(data, 0, foot) + "】");
}
}
} |